概述
javascript 立即执行函数
先看下面这段代码:
func a(){
var b = function () {
var bbb = 234;
console.log(aaa);
}
var aaa = 132;
return b;
}
var glob = 1000;
var demo = a()
demo()
方法 b 在 a 中定义; 在 a 外部执行 (保存 函数 a 的执行上下文); ----------------> 生成闭包
闭包函数的小例子:
function a() {
var num = 100;
function b() {
num++;
console.log(num)
}
return b;
}
var demo = a();
demo(); //101
demo(); //102
函数a 执行的时候 , 函数b 未被执行 并且返回 函数b; ------>形成闭包。
这时候返回的 函数b 会带着 函数a 的 执行上下文
在这里 demo 始终保存着 返回 函数b 已经 函数a 的 作用域执行链; 直到 demo 作用域销毁
闭包的危害:
当 内部函数 被保存到外部时,将会生成闭包。 闭包会导致 原有作用域链(引用类型) 不释放。造成内存泄露(占用,内存泄露)
闭包的作用:
- 实现共有变量
- 可以做缓存(存储结构)
- 可以实现封装,属性的私有化
- 模块化开发,防止污染全局变量
立即执行函数: 针对初始化的功能的函数。执行一次,执行完毕自己 立即释放
形式:
- 不带参数的
(function () { }())
- 带参数的
(function (a, b, c) { console.log(a+b+c)// 6 }(1,2,3))
- 带返回值
var num = (function (a, b, c) { var d = a+b+c; return d; }(1,2,3))
所谓 立即执行函数 不是 javascript 新创的语法(区别于普通函数的函数,他就是普通函数),而是不同函数的特殊写法
官方推荐 几种写法: 只有表达式 才能被 执行符号 执行, 变成表达式以及 会忽略 函数的名字
1=>: (function () { // }()) W3C 建议写法
2=>: (function () { // })()
3=>: + function test (){// }() + 运算符(正负) 隐士转化 为表达式
4=>: - function test (){// }() - 运算符(正负) 隐士转化 为表达式
5=>: ! function test (){// }() ! 运算符 隐士转化 为表达式
函数的定义 两种 只有表达式 才能被 执行符号 执行
1 函数的声明
function f() {}2 函数表达式
var fun1 = function () { }
函数的声明 不能被执行
function f() {}() //报错
函数表达式 可以被执行
var fun1 = function () { console.log('fun1') }() //执行 打印 fun1 var fun1 是返回值
最后
以上就是靓丽大神为你收集整理的第八讲 《javascript 第八讲 二 立即执行函数》的全部内容,希望文章能够帮你解决第八讲 《javascript 第八讲 二 立即执行函数》所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复