面试官必问的一个问题-----闭包
在找工作面试的时候,面试官们跟商量好的一样都会向你问一种问题的,那就是闭包这个问题。
通常情况下会这样问:
什么是闭包?
闭包有什么特性?
闭包对页面有什么影响?
闭包的优缺点是什么?
...............
那现在我们就来盘一盘这个闭包!
什么是闭包:
闭包就是利用作用域的嵌套,将原来的局部变量,进化成自由私有变量的环境。
闭包的原理:
利用作用域的嵌套,触发计算机的垃圾回收机制,将原来要删除的变量暂时保存起来,可继续使用。
垃圾回收机制:
将要删除的数据,先暂时存放在一个临时空间内,不立即删除,如果需要再次使用,可以直接找到该数据继续使用,如没有利用价值再去清除掉。
闭包的应用:
1.循环中的异步:
var ali = document.querySelectorAll("li"); //第一种 for(var i=0;i<ali.length;i++){ (function(index){ ali[index].onclick = function(){ console.log(index); } })(i) } //第二种 for(var i=0;i<ali.length;i++){ ali[i].onclick = (function(index){ return function(){ console.log(index); } })(i); } //第三种 for(let i=0;i<ali.length;i++){ ali[i].onclick = function(){ console.log(i); } }
2.计时器的回调函数
setTieout(fn("hello"),5000); function fn(str){ return function(){ console.log(str); } }
3.在外部重复操作函数内部的变量
function fn(){ var a =10; return function(){ console.log(a++) } } var f = fn(); f(); f(); f();
闭包的特点:
闭包就是将作用域内部和外部连接起来的桥梁
优点:
1.可以将要删除的数据保存起来,继续使用,很方便
2.可以在函数外部操作内部的数据
缺点:
1.因为要删除的数据,没有被删除而继续存起来,那么会占内存,好性能。
2.在外部有可能改变内部的数据。