[英]Javascript named function as an expression
JavaScript代碼
var d = function c() { console.log(c); };
d(); // function c() { console.log(c); };
c(); // Reference Error
我了解變量提升的概念,其中將變量聲明和函數定義提升到現有作用域的頂部。 同樣,不表達函數表達式中的函數定義。
因此,以上將是
var d;
d = function c() { console.log(c); };
d();
c();
因此d是對命名函數c的引用
d()
,函數c在全局范圍內執行,其中沒有名為c的變量或屬性。 但是控制台仍然管理着記錄c的功能定義。 c()
出現參考錯誤。 [如我所料] 情況2證明沒有可用的名為c的窗口屬性。那么, d()
如何在執行時打印出c的定義?
每個函數在其本地范圍內是否都具有作為屬性的定義?
是。 命名函數表達式僅在該函數的范圍內產生與函數名稱相對應的變量。
這是一篇關於該主題的出色但冗長的文章: http : //kangax.github.com/nfe/
另請參閱ECMAScript 5規范的相關部分 。 它對此有特定說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.