zoukankan      html  css  js  c++  java
  • JavaScript容易理解错误的例子

    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.

     
     
  • 相关阅读:
    202103226-1 编程作业
    MSF原则
    介绍
    4 20210412-1 原型设计作业
    案例分析作业
    第二次编程
    阅读任务
    自我介绍
    案例分析作业
    阅读任务
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540352.html
Copyright © 2011-2022 走看看