for循环中let,var声明变量的不同

看例子:

function loop(){
    for(let i=0;i<100;i++){
        setTimeout(
            function(){
                console.log(i)
            },100
        )
    }//打印,0-99
    for(var i=0;i<100;i++){
        setTimeout(
            function(){
                console.log(i)
            },100
        )
    }//打印,100次100
}
loop()

首先,let声明的变量每次循环都创建一个块级作用域,并且存上i的值,这里面的let定义的i值就是局部变量,所以每次循环改变的就是对局部变量赋值,访问也是根据作用域链规则访问局部变量i这样就得到了最后的结果。

然而,var声明的变量i是全局变量,最后访问的都是全局变量i,而每次循环改变i的值就是改变全局变量的值,故而输出值均为100.

原文地址:https://www.cnblogs.com/jundongsheng/p/13549706.html