簡體   English   中英

以JavaScript命名的函數作為表達式

[英]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的引用

  1. 在執行d() ,函數c在全局范圍內執行,其中沒有名為c的變量或屬性。 但是控制台仍然管理着記錄c的功能定義。
  2. 當我嘗試c()出現參考錯誤。 [如我所料]

情況2證明沒有可用的名為c的窗口屬性。那么, d()如何在執行時打印出c的定義?

每個函數在其本地范圍內是否都具有作為屬性的定義?

是。 命名函數表達式僅在該函數的范圍內產生與函數名稱相對應的變量。

這是一篇關於該主題的出色但冗長的文章: http : //kangax.github.com/nfe/

另請參閱ECMAScript 5規范的相關部分 它對此有特定說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM