函數宣告
函數賦值表達式
命名函數的賦值表達式
的賦值表達式
function foo() {}上面的方法會在執行前被 解析(hoisted),因此它存在於當前上下文的任意一個地方, 即使在函數定義體的上面被呼叫也是對的。
foo(); // 正常运行,因为foo在代码运行前已经被创建 function foo() {函數賦值表達式
var foo = function() {};這個例子把一個匿名的函數賦值給變數 foo 。
foo; // 'undefined' foo(); // 出错:TypeError var foo = function() {};由於 var 定義了一個宣告語句,對變數 foo 的解析是在程式碼運作之前,因此 foo 變數在程式碼執行時已經被定義過了。 但是由於賦值語句只在執行時執行,因此在對應程式碼執行之前, foo 的值缺省為 undefined。 命名函數的賦值表達式另一個特殊的情況是將命名函數賦值給一個變數。
var foo = function bar() { bar(); // 正常运行 } bar(); // 出错:ReferenceErrorbar 函數宣告外是看不見的,這是因為我們已經把函數賦值給了 foo ; 然而在 bar 內部依然可見。這是由於 JavaScript 的 命名處理 所致, 函數名在函數內總是可見的。
注意:在IE8及IE8以下版本瀏覽器bar在外部也是可見的,是因為瀏覽器對命名函數賦值表達式進行了錯誤的解析, 解析成兩個函數 foo 和 bar
以上就是JavaScript進階系列-函數宣告與表達式的內容,更多相關內容請關注PHP中文網(www.php.cn)!