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

浙公网安备 33010602011771号