js闭包

2020-02-02  本文已影响0人  彼得朱

1、含义

js闭包就是跨作用域访问变量——内部作用域可以保持对外部作用域变量的使用,从而使得更外部的作用域可以访问内部作用域的变量

2、出现原因

函数内部可以访问函数外部作用域的变量,但函数外部不可以访问函数内部,如果想让它访问到,可以使用闭包实现。

注意:外部可以通过闭包函数返回的函数内部而得到函数内部变量

3、为什么使用

局部变量无法共享和长久的保存,而全局变量可能造成变量污染,希望有一种机制可以长久的保存变量却又不造成变量污染

4、何时使用

变量既想反复使用,又想避免造成全局污染

5、如何使用(函数有三层)

//eg:
function user(){
    var name = 'zhuhui';
    return function getName(){
        return name;
    }
}
//调用
var userName = user()();
console.log(userName);

6、常见面试题

(1)
var name = 'hy';
function user(){
    function getName(){
        console.log(name);
    }
    getName();
}

user();//这里输出hy
(2)
for(var i =0;i<4;i++){
    setTimeout(function(){
        console.log(i);  
    },300);
}

结果:输出 4 个 4。

1.png

原因:js 在执行的 时候都会执行主线程,异步相关的会存在异步队列中,当主线程执行完毕后才会执行异步队列中的,所以打印出来的 是 4 个 4。

修改:使用闭包或者 let

2.png 3.png
上一篇 下一篇

猜你喜欢

热点阅读