闭包
- 定义 :内部函数被保存到外部,将生成闭包
- 危害 :导致原有作用域链不释放,造成内存泄漏
-
作用
- 实现公有变量
function sum(){
var sum = 0 ;
function op(){
sum ++;
console.log(sum);
}
return op;
}
此处的sum变量公有化
2. 可以进行缓存(外部不可见)
function test(){
var num =100;//隐式的缓存
function a(){
num ++;
console.log(num);
}
function b(){
num --;
console.log(num);
}
return [a,b]
}
var myArr =test();
myArr[0]();//101
myArr[1]();//100
- 可以进行封装,属性私有化
- 模块化开发,防止污染全局变量
立即执行函数
作用:针对初始化功能,执行完成后立即释放,只执行一次
(function (形参位置){
var a = 1;
var b = 1;
console.log(a+b);
}(实参位置)
)//可以有返回值
形式:
(function(){}());//W3C建议
(function(){})();
上述代码中()为执行符号
函数执行符号()扩展
原则:只有函数表达式才能执行
function test(){
console.log(’Hello World‘)
}();//语法错误,原因这个是函数声明并不是函数表达式
+ function test(){
console.log(’Hello World‘)
}();//输出a ,+的操作强制转为Number,所以属于表达式,例如 +,-,!,但是乘除不行
- 特例:
function test(a){
console.log(a)
}(5);//没有输出,也不报错
原因:(5)当成运算符进行处理,上面为方法体。
var test = function(){
console.log(’Hello World‘)
}();//输出a
console.log(test);//输出undefined,类似与立即执行函数,此函数被放弃,导致为undefined
网友评论