什么是闭包?
总结:
1,有函数嵌套
2,内部函数被外部访问,暴露出了句柄「return 内部函数」
上菜
特点
1,暴露出来的这个函数有被调用的可能性「return 内部函数」,外部函数就永远不能被释放「内存泄漏」
内存泄漏是什么意思?
一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束(关闭浏览器)。
function xx(){
var b={name:"pear"}
var a=1
console.log(a)
}
上面代码里面的b就造成了内存泄漏,当xx()执行完后,只是释放了栈里面的b,但是内存里面的数据不会释放
非常容易错的一个coding
修改:在for循环外部添加一层function包裹
怎么解决这个问题呢?我们需要每个li都绑定点击事件
立即执行函数
完整代码
2,外部能访问函数内部的变量
定义全局变量:
var global= null;
function fn1(){
var str1="1";
function fn2(){
console.log(str1);
}
global=fn2;
}
fn1()//执行了这行,才能得到global=fn2的赋值
global();//1
返回值:
function fn1(){
var str1="1";
function fn2(){
console.log(str1);
}
return fn2;
}
var str=fn1()//执行了这行,才能得到str=fn2的赋值
str();//1
闭包的好处,有豆腐块的命名空间
这和模块化编程有必然的联系
现在不是很懂为什么$变量不会被覆盖?
参考文章:
方方老师 JS中的闭包是什么?
阮一峰