美文网首页
js var let问题

js var let问题

作者: 叫我魏大川 | 来源:发表于2019-11-07 10:26 被阅读0次

    对接腾讯地图时循环添加marker,for循环时遇到了一个诡异的问题,给marker添加点击事件,类似block的调用方式,如果参数用了var,则永远取到的是循环里的最后一个marker。

    ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。

    ”let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。“

    举例:

    for (var i = 0; i <10; i++) {  
      setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。
        console.log(i);        // 执行此代码时,同步代码for循环已经执行完成
      }, 0);
    }
    // 输出结果
    10   共10个
    // 这里面的知识点: JS的事件循环机制,setTimeout的机制等
    
    // i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
    for (let i = 0; i < 10; i++) { 
      setTimeout(function() {
        console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
      }, 0);
    }
    // 输出结果:
    0  1  2  3  4  5  6  7  8 9
    

    相关文章

      网友评论

          本文标题:js var let问题

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