面试官必问的一个问题-----闭包

在找工作面试的时候,面试官们跟商量好的一样都会向你问一种问题的,那就是闭包这个问题

通常情况下会这样问:

什么是闭包?

闭包有什么特性?

闭包对页面有什么影响?

闭包的优缺点是什么?

...............

那现在我们就来盘一盘这个闭包!

什么是闭包:

闭包就是利用作用域的嵌套,将原来的局部变量,进化成自由私有变量的环境。

闭包的原理:

利用作用域的嵌套,触发计算机的垃圾回收机制,将原来要删除的变量暂时保存起来,可继续使用。

垃圾回收机制:

将要删除的数据,先暂时存放在一个临时空间内,不立即删除,如果需要再次使用,可以直接找到该数据继续使用,如没有利用价值再去清除掉。

闭包的应用:

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.在外部有可能改变内部的数据。

猜你喜欢

转载自www.cnblogs.com/musen123/p/11609642.html