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

  • 时间:
  • 浏览:
  • 来源:互联网

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

本文链接http://www.dzjqx.cn/news/show-617199.html