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