美文网首页
var与let?

var与let?

作者: LeeYaMaster | 来源:发表于2019-01-15 16:29 被阅读2次

首先我们来看一道面试题

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

通常,你以为这不就是一个for循环吗?结果肯定是123456了,但是却发现答案是5555555,这是什么原因呢?原因就在setTimeout里,setTimeout是个异步函数,里面的this指向window,以及他会在for循环加载完之后,才会执行,当for循环加载完了时,i也就等于5了。所以会输出555555.怎么避免这个情况呢?于是我们这样写

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

使用立即调用,便可以达到这个效果了。但是呢,还有一个更简便的方法,那就是采用let

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

结果会是501234,setTimeout会延时触发,所以会先输出最后一个。
这里摘抄官网一段话:
当let声明出现在循环体里时拥有完全不同的行为。 不仅是在循环里引入了一个新的变量环境,而是针对每次迭代都会创建这样一个新作用域。 这就是我们在使用立即执行的函数表达式时做的事,所以在setTimeout例子里我们仅使用let声明就可以了。

相关文章

  • 第二章 let 和 const 命令

    // let 与 var /* 一 */ { let a =12; var b =10; } //...

  • ES6-let & const

    一. let与var let 是块级作用域;var 是函数级作用域。 二. let 与 const let与con...

  • 关于ES6的let命令

    1、let的基本用法以及let和var的区别 (1) let与var一样是用来声明变量的,与var的区别是let所...

  • ES6_var、let与const

    var,let 与 const var 申明变量。 let 申明变量,更完美的 var。 const 申明常量(物...

  • let 与 var

      ECMAScript 6 中新增了 let 命令来声明变量,它的用法类似于 var,但是 let 所声明的变量...

  • var与let

    1、var定义变量 1.1 不指定类型定义变量 //定义变量(不指定类型变量),使用var关键字var x = 1...

  • var与let?

    首先我们来看一道面试题 通常,你以为这不就是一个for循环吗?结果肯定是123456了,但是却发现答案是55555...

  • var 与let

    1.声明提升 使用var 声明变量,声明会提升到顶部 使用let 声明变量不会提前 在函数内部用var声明变量,只...

  • 20190301 es6学习—let和const命令

    let命令 let与var之间的不同 声明变量的作用域 作用:声明变量 类似var与var的区别:var声明的变量...

  • ES6之let/const/var

    let与var let声明的变量有严格局部作用域,var会越域 let只能声明一次变量,var可以多次声明 let...

网友评论

      本文标题:var与let?

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