//1var name='world';(function(){ if(typeof name 'undefined'){ var name='jack'; console.log('Goodbye'+name); }else{ console.log('Hello'+name); }})();// ...
//1
var name='world';
(function(){
if(typeof name==='undefined'){
var name='jack';
console.log('Goodbye'+name);
}else{
console.log('Hello'+name);
}
})();//輸出Goodbyejack
//2當把var去掉後:
var name='world';
(function(){
if(typeof name==='undefined'){
name='jack';
console.log('Goodbye'+name);
}else{
console.log('Hello'+name);
}
})();//輸出Helloworld
總結:當作用域中有該變數時,會將變數提至函數最前面,但賦值會留在原地,所以當window在function的第一行檢測到為undefined的name,故而第一個輸出為Goodbyejack;
第二個因為剛開始未檢測到有name在函數內部聲明,所以window直接去全局裡找到world這個name,所以就使用了有值的name,最後輸出Helloworld.