![](/img/trans.png)
[英]Using a non-global variable in one function for a separate function (Javascript)
[英]How do named function definitions work inside non-global scopes in Javascript?
如果執行以下代碼,是否在任何地方定義了G?
function F() { function G() {} } f = new F();
我知道F現在可以作為F
或window.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.