[英]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.