先看一题
var name = 'Tom';
function () {
if(typeof name == 'undefined'){
var name = 'jack'
console.log('GoodBye' + name)
}else{
console.log('Hello'+name)
}
}()
// GoodByejack
反复看都没有理解为什么会输出这个结果,原因是没有留意到函数内的变量提升
转化一下
var name = 'Tom';
var f1 = function () {
var name
if(typeof name == 'undefined'){
name = 'jack'
console.log('GoodBye' + name)
}else{
console.log('Hello'+name)
}
}
f1()
这样看就比较清楚了,函数内变量提升,覆盖了外部的name全局变量,判断类型时,函数内变量name并未赋值,导致了上面的输出结果
浙公网安备 33010602011771号