美文网首页
JavaScript容易理解错误的例子

JavaScript容易理解错误的例子

作者: 青穗黄 | 来源:发表于2016-11-24 17:07 被阅读11次

    1
    for (var i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); }//输出五次6
    2
    for (let i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); } //输出1,2,3,4,5
    3
    for (var i = 1; i <=5; i++){ (function () { var j = i; setTimeout(function timer() { console.log(j); }, j*1000); })(i);} //输出1,2,3,4,5
    4
    改进这段代码
    for (var i =1; i<=5; i++){ (function (j) { setTimeout(function timer() { console.log(j); }, j*1000); })(i);}
    代码1中到底有什么缺陷导致它的行为同语义所暗示的不一致呢?
    缺陷是我们试图假设循环中的每个迭代在运行时都会给自己“捕获”一个i的副本,但是根据作用域的工作原理,实际情况是尽管循环中的五个函数实在各个迭代中分别定义的,但是他们都被封闭在一个共享的全局作用域中,因此实际上只有一个i.

    相关文章

      网友评论

          本文标题:JavaScript容易理解错误的例子

          本文链接:https://www.haomeiwen.com/subject/vrwbpttx.html