《JavaScript權威指南》中指出:JavaScript變數在聲明之前已經可用,JavaScript的這個特性被非正式的稱為聲明提前(hoisting),即JavaScript函數中聲明的所有變數(但不涉及賦值)都被“提前”至函數的頂部。下麵我們從實例中看看: 實例1: 調用函數myFunc() ...
《JavaScript權威指南》中指出:JavaScript變數在聲明之前已經可用,JavaScript的這個特性被非正式的稱為聲明提前(hoisting),即JavaScript函數中聲明的所有變數(但不涉及賦值)都被“提前”至函數的頂部。下麵我們從實例中看看:
實例1:
var aa = "test"; function myFunc(){ console.log('aa值為:'+aa); var aa = "TEST"; } myFunc();
調用函數myFunc() 列印的結果為 undefined ,因為函數作用域的特性,函數中申明的變數(但不涉及賦值)被“提前”至函數的頂部,所以局部變數在整個函數體始終有效,局部變數aa會覆蓋掉全局變數aa,因此列印的結果為 undefined ,其運行過程等價於實例2,如下:
實例2 :
var aa = "test"; function myFunc(){ var aa; console.log('aa值為:'+aa); aa = "TEST"; } myFunc();
運行結果如下: