首頁 > web前端 > js教程 > JavaScript進階系列-函數宣告與表達式

JavaScript進階系列-函數宣告與表達式

黄舟
發布: 2017-02-08 10:00:36
原創
1192 人瀏覽過
  • 函數宣告

  • 函數賦值表達式

  • 命名函數的賦值表達式


的賦值表達式

。一個常見的用法是把匿名函數當作回呼函數傳遞到非同步函數中。

函數宣告

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(); // 出错:ReferenceError
登入後複製

bar 函數宣告外是看不見的,這是因為我們已經把函數賦值給了 foo ; 然而在 bar 內部依然可見。這是由於 JavaScript 的 命名處理 所致, 函數名在函數內總是可見的。


注意:在IE8及IE8以下版本瀏覽器bar在外部也是可見的,是因為瀏覽器對命名函數賦值表達式進行了錯誤的解析, 解析成兩個函數 foo 和 bar 


以上就是JavaScript進階系列-函數宣告與表達式的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!

🎜🎜🎜
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板