- 你在
for
里定义的匿名函数是个函数表达式,不是函数声明语句,不存在声明提升。 - 如果换成函数声明试试呢?
function getNum() {
for (var i = 0; i < 10; i++) {
function temp(i) {
setTimeout(function() { console.log(i); }, 100 * i);
}
temp(i)
}
}
//输出结果:0,1,2,3,4,5,6,7,8,9
getNum();
结果没变。这是为啥呢?
再验证下:
function getNum() {
// "use strict"; // 严格模式和非严格模式都试试
console.log(1, typeof temp)
for (var i = 0; i < 10; i++) {
console.log(2, typeof temp)
function temp(i) {
//setTimeout(function() { console.log(i); }, 100 * i);
}
temp(i)
}
console.log(3, typeof temp)
}
getNum();
验证后再看下Javascript块级域内的函数声明提升
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…