先舉個例子: 結果: 結果: 原因: 解析器在向執行環境中夾在數據時,對函數聲明和函數表達式並非一視同仁。解析器會率先讀取函數聲明,並使其在執行任何代碼之前可用(可以訪問)。 說白了就是,用函數聲明形式定義的函數支持變數提升 ,而函數表達式形式的不行。 個人理解: 如果能夠變數提升,先用了再說,然後 ...
先舉個例子:
function test() {
foo();
function foo() { //函數聲明形式定義函數
console.log("成功");
}
}
test();
結果:成功
function test() {
foo();
var foo = function foo() { //函數表達式形式定義函數
console.log("成功");
}
}
test();
結果:TypeError:foo is not a function
原因:
解析器在向執行環境中夾在數據時,對函數聲明和函數表達式並非一視同仁。解析器會率先讀取函數聲明,並使其在執行任何代碼之前可用(可以訪問)。 說白了就是,用函數聲明形式定義的函數支持變數提升 ,而函數表達式形式的不行。
個人理解:
如果能夠變數提升,先用了再說,然後再看說明,比如例子一。先調用foo(),接著才聲明function foo()