今天看到的两道题,第一眼还被迷惑住了。
- 第一题:
var name = 'Tom';
(function(){
if(typeof(name) == undefind){
name = 'Jack';
console.log('Goodbye ' + name);
}else{
console.log('Hello ' + name);
}
})();
// 'Hello Tom'
- 第二题:
var name = 'Tom';
(function(){
if(typeof(name) == undefind){
var name = 'Jack';
console.log('Goodbye ' + name);
}else{
console.log('Hello ' + name);
}
})();
// 'Goodbye Jack'
typeof(name) 执行时,第一题中,函数作用域内找不到 name ,就会从作用域链寻找,便找到了 window 作用域下的 name ,所以 name 的值为 'Tom'。而在第二题中,函数作用域内 var name = 'Jack'; 会将name的声明提升到作用域上层,这时name还未赋值,所以name的值为undefind。