signed

QiShunwang

“诚信为本、客户至上”

03JavaScript核心:闭包面试真题集中解析

2021/3/21 1:21:49   来源:

1.循环体与闭包系列

2.复杂作用域系列

1.循环体与闭包系列

for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

console.log('i的值是' + i);

输出:先输出‘i’的值是5,然后输出5个5。
过程:

  1. 执行for循环,由于定时器是异步任务,其回调函数会放到任务队列中,等待主线程执行栈执行完再执行。
  2. for循环运行完,此时i的值为5,运行最后的 console.log('i的值是' + i);
  3. 主线程执行完毕,执行定时器回调。

2.复杂作用域系列

var a = 1;
function test(){
    a = 2;
    return function(){
        console.log(a);
    }
    var a = 3;
}
test()();   // 2