
函式
63
名函式表達式,
name
屬性都有定義。對匿名的函式表示式,則依賴於實作方式;可能是
(在 IE 上),也可能是個空字串(在 Firefox、WebKit 上):
使用除錯工具時,例如 Firebug,
name
屬性會很有用。當除錯工具需要在一個函式中顯示
錯誤,它可以檢查
name
屬性是否存在,並用它作為判斷指標。
name
屬性也被用來遞迴
呼叫自己。如果你對這兩種情況都沒興趣,那麼不具名的函式表示式會比較簡單也較不
囉嗦。[60]
反對採用函式宣告式,而認為使用函式表示式比較好的理由是,因為表示式突顯出函式就
是物件,就跟其他所有物件一樣,而不是什麼特殊的語言結構。
技術上是可以將一個具名函式表示式指派給有著另一個名稱的變數,例如:
var foo = function bar() {};
然而這種用法產生的行為在某些瀏覽器(IE) 上未被正確的實作,所以不建議用這種模式。
函式的 Hoisting
從前面的討論中你可能會得出這樣的結論:函式宣告式和具名的函式表示式的行為非常接
近。但這不全然是對的,因為他們的不同處就在於 hoisting 行為。
Hoisting 此術語並未定義在 ECMAScript 中,卻是描述這種行為常見的好方法。
正如你所知道 的,所有的變 數,不論定義在 函式本體中的 哪裡,都會在幕 後被提升
(hoisted)到函式的最前端。這行為也適用於函式,因為它們也只是賦值給變數的物件。
唯一讓人意想不到
譯著1
的是,函式宣告式,不只是