闭包

什么是闭包?

总结:

1,有函数嵌套
2,内部函数被外部访问,暴露出了句柄「return 内部函数」

上菜
闭包_第1张图片
图片.png
闭包_第2张图片
图片.png
闭包_第3张图片
图片.png
特点

1,暴露出来的这个函数有被调用的可能性「return 内部函数」,外部函数就永远不能被释放「内存泄漏」
内存泄漏是什么意思?
一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束(关闭浏览器)。
function xx(){
var b={name:"pear"}
var a=1
console.log(a)
}
上面代码里面的b就造成了内存泄漏,当xx()执行完后,只是释放了栈里面的b,但是内存里面的数据不会释放

非常容易错的一个coding

完整代码

闭包_第4张图片
图片.png

修改:在for循环外部添加一层function包裹

怎么解决这个问题呢?我们需要每个li都绑定点击事件

立即执行函数
完整代码

闭包_第5张图片
图片.png

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

闭包的好处,有豆腐块的命名空间

闭包_第6张图片
图片.png

这和模块化编程有必然的联系
现在不是很懂为什么$变量不会被覆盖?
参考文章:
方方老师 JS中的闭包是什么?
阮一峰

你可能感兴趣的:(闭包)