美文网首页
for 循环中的 let

for 循环中的 let

作者: saronic | 来源:发表于2016-12-04 13:04 被阅读116次

var 实现

for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

运行打印 5 个 5 。因为 funciton 里面的 log(i), i 都是指向全局作用域的 i, for 循环执行完了以后,i 已经变成 5 了。可以用下面办法变通:

for (var i = 0; i < 5; i++) {
    (function () {
        var j = i;
        setTimeout(function() {
            console.log(j);
        }, i * 1000);
    })();
}

再看下面的 let 实现:

for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

打印 0 到 4。 原因是 let 是块级作用域,每次循环内部,都是一个新的 i (参考:[阮一峰的 es6]](http://es6.ruanyifeng.com/#docs/let) )。
这段代码可以看成这样的:(参考这里 )

{
    let k;
    for (k = 0; k < 5; k++) {
        let i = k;  // <-- new `i` for each iteration!
        setTimeout(function() {
            console.log(i);
        }, i * 1000);
    }

}

相关文章

  • ES6学习笔记1

    let命令 let命令声明的变量只在所在代码块内生效,适用于for循环中的变量。经典的闭包问题如果用let来作为循...

  • for 循环中的 let

    var 实现 运行打印 5 个 5 。因为 funciton 里面的 log(i), i 都是指向全局作用域的 i...

  • ES6

    一、let和const 1.let 在 js/es6 中,用let在for循环中声明的变量,在外部无法访问 let...

  • (一)let 和 const 命令

    let命令 let命令声明的变量,只在let所在的块级作用域有效 如果将循环中的let写为var,则arry[3]...

  • ES6新加入的内容(1)

    let 1、let 声明变量的一种新的方式2、用let声明的变量没有变量提升3、for循环中用let声明 变为块级...

  • ES6 let var const解析

    let 和 var,const let声明的变量只在let所在的代码块有效 for循环中,var声明的是全局的,l...

  • 第二章⑥跳转语句

    break 使用在switch中或者循环中使用在循环中,表示:结束当前循环(默认最近) continue 使用在循...

  • ES6 let与const

    let和const let命令 let用法类似var,但是所声明的变凉,只在let命令所在的代码块内有效 for循...

  • 一、ES6新增特性 let 和const

    1、let命令 let与Var区别: let用户声明变量,但只在所在的代码块内生效,在for循环中使用很是合适;v...

  • 第一章 let和conset命令

    let 1.let声明类似于var,但是let只在所在的代码块中有效,可以很好的用在for循环中代替var,记住只...

网友评论

      本文标题:for 循环中的 let

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