当内部的函数被保存在外部,将会产生闭包。闭包会导致原有作用域链不释放,造成内存泄露。
立即执行函数,执行后销毁
只有表达式才能被执行符号执行
可执行函数忽略名字
var num = (function (){
var a = 123;
var b = 234;
console.log(a+b);
return d;
}(传入的参数,1,2,3))
作用:
- 实现公有变量 eg:函数累加器
- 可以做缓存(存储结构) eg:eater
- 可以实现封装,属性私有化
- 模块化开发,防止污染全局变量
function test() {
var arr = [];
for(var i = 0; i < 10; i++){
arr[i] = function () {
document.write(i + " ");
}
}
return arr;
}
var myArr = test();
for(var j=0; j<10;j++) {
myArr[j]();
}
产生结果 都是10
解决方案如下,使用立即执行函数
function test() {
var arr = [];
for(var i = 0; i < 10; i++){
(function (j) {
arr[j] = function () {
document.write(j + " ");
}
}(i);
}
return arr;
}
var myArr = test();
for(var j=0; j<10;j++) {
myArr[j]();
}