美文网首页
let、var、settimeout的思考

let、var、settimeout的思考

作者: A郑家庆 | 来源:发表于2018-11-22 10:04 被阅读0次

几天前看过一个例子

for (var i = 0;i < 9; i++) {
      setTimeout(()=> {
           console.log(i)
   }, 1000)
}
for (let i = 0;i < 9; i++) {
      setTimeout(()=> {
           console.log(i)
   }, 1000)
}
for (var i=1; i<=9; i++) {
    (function(j){
        setTimeout( function timer(){
            console.log( j );
        }, 1000 );
    })( i );
}

首先我们看到的这个是一个for循环,也就意味着里面的代码需要执行9次,创建九个settimeout,第一个例子中settimeout的i值,是一个全局变量i,每次循环这个值都会改变,指向的是最外层也就是全局的i值,当1秒后打印的时候,i的值已经变成了9,所以打印出来的是九个9,第二个例子因为let是有作用域的,所以settimeout的i值指向的是每个循环体中的i值,每次循环的值都是不一样的,打印出来的是0,1,2,3,4,5,6,7,8,第三个例子,因为每个i的值都会传入function中,settimeout中的i作用域在这个闭包中,所以打印出来的值也是0,1,2,3,4,5,6,7,8

相关文章

网友评论

      本文标题:let、var、settimeout的思考

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