簡體   English   中英

JavaScript中的閉包和詞法環境

[英]Closures and lexical environment in javascript

我以為只有在調用函數時才創建閉包。 以下文章 (和其他文章 )確實使我感到困惑。

每當定義函數時,就創建一個閉包。 然后,當您執行函數時,它們的閉包使它們能夠訪問其作用域中的數據。

有人可以澄清一下在創建函數或調用函數時是否進行了關閉。 因為我似乎找不到統一的答案。

這是創建函數的時間。 如果在另一個函數內部創建一個函數,例如將其作為事件處理程序分配給某個元素,則該事件處理程序函數必須保留對創建該函數的外部變量范圍的引用,無論是否調用該處理程序。

只有在函數創建時就創建了閉包,才會發生這種情況,因為外部函數返回的時間很長,但是其變量(至少是處理程序引用的變量)必須在預期處理程序調用時繼續存在。

 function makeAdder(n){ return function(x){return n+x;}; } add1=makeAdder(1); add5=makeAdder(5); console.log(add1(1)); console.log(add5(1)); console.log(add1(2)); console.log(add5(2)); 

閉包部分是內部的匿名函數“看到” n ,該參數傳遞給makeAdder 返回的函數可以被調用多次,並且將使用相同的閉包(因此,相同的n如果需要也可以更改它)。

Clouser是在創建函數時創建的,只有這樣,您的作用域中的局部變量才會越來越近。 當函數執行時,實際上就是閉包,您將訪問閉包中的變量。 請參見本頁頂部的示例。

從封閉的簡單定義,創建了一個功能,當它被創建。 定義為函數與聲明(創建)函數的環境之間的關系。

在定義函數時創建閉包。

簡單地說,閉包是函數的范圍。在函數閉包內聲明的任何變量均不能在該函數閉包外使用。 但是,該特定功能可以訪問屬於另一個結構的封閉結構的任何項目,只要該特定功能位於該結構的封閉結構內即可。

如果這樣做沒有幫助,請嘗試了解范圍(例如,在Java中),並且范圍和范圍之間的關系非常緊密

暫無
暫無

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

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