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.

     
     
  • 相关阅读:
    虚函数******
    C++ 中的运算符重载********
    继承
    静态成员和成员函数
    类指针
    内联函数
    k8基础架构
    cobbler自动装机
    ens33-eth0
    PXE-自动装机配置
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540352.html
Copyright © 2011-2022 走看看