ES6中 let 和 var 的区别

$(function(){
  var j = 0
            for(let i=0;i<2;i++,j++){
                setTimeout(function(){
                    console.log(i,j)
                },1000)
            }
                
})        
输出: 0 2 ,1 2

setTimeout(func,time)函数,延迟运行函数.将func函数添加到“执行队列”中,当主程序完成后,再按照执行队列运行.

let 是块级作用域,每次for 循环把定义的i 会保存在闭包函数(setTimeout()中的函数)中,所以每次打印都是不同的值;var 定义的 j 在for循环的外面,for 循环执行完,j 已经变成 2,所以每次打印出来都是2

 

$(function(){
  let j = 0
            for(let i=0;i<2;i++,j++){
                setTimeout(function(){
                    console.log(i,j)
                },1000)
            }
                
})        
输出: 0 2 ,1 2

 同上,虽然j 是用 let 定义的,但是for 循环执行完,依然变成 2

$(function(){
  let i, j = 0
            for(i=0;i<2;i++,j++){
                setTimeout(function(){
                    console.log(i,j)
                },1000)
            }
                
})        
输出: 2 2 ,2 2

 此时 i 和 j 都定义在for 循环外面,打印出来都是 2

$(function(){
  var j = 0
            for(let i=0;i<2;i++,j++){
                setTimeout(function(){
                    console.log(i,j)
                },1000)
            }
                
})        
输出: 0 2 ,1 2

  

附:

var person = {
  age: 18,
  getAge: function() {
    return this.age;
  }
};
var getAge = person.getAge;
console.log(person.getAge(), getAge());  
// 执行结果 18 undefined
// 第一个执行时,this指向person对象,第二个函数执行时,this指向window

  

posted @ 2020-03-14 10:53  XLLANG  阅读(427)  评论(0编辑  收藏  举报