簡體   English   中英

命名函數定義如何在Javascript的非全局范圍內工作?

[英]How do named function definitions work inside non-global scopes in Javascript?

如果執行以下代碼,是否在任何地方定義了G?

function F() { function G() {} } f = new F();

我知道F現在可以作為Fwindow.F (假設瀏覽器上下文)使用,但是我不確定是否可以在非全局范圍內(例如,通過new調用時F的范圍內)具有命名函數定義。

另外,我可以通過

function F() { function G() {} window.theG = G; } f = new F();

然后console.log(window.theG)返回function G() (在Chrome DevTools中)。 所以G 存在 ,並且我們有一個引用,但是我還有其他方法可以訪問G嗎?

函數聲明會在當前范圍內創建一個與函數名稱匹配的變量。

調用F ,將創建一個名為G的局部變量。 除非您將其值復制到某個位置(例如,使用window.theG盡管this.theG是更常見的模式),否則該函數將完成執行,否則將不留任何引用,並且將對其進行垃圾回收。

即它的行為就像其他帶有值的局部變量一樣。 在這方面,功能沒有什么特別的。

在第一個示例中,您提供的G將是F的私有變量。因為它僅存在於F的上下文中,所以一旦執行F,便會處置G。 如果要保留對它的引用,則可以像在第二個示例中那樣將其分配給全局范圍,將其設置為F的屬性,如下所示:

function F() {
    this.G = function () {}
}

現在您可以像這樣訪問它:

var f = new F();
f.G();

暫無
暫無

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

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