這篇文章將分享關於JavaScript中閉包的知識點,有一定的參考價值,希望對大家有所幫助
閉包是函數和宣告該函數的詞法環境的組合,當內部函數被保存到外部時,將會產生閉包而閉包會導致原有作用域鏈不釋放,造成記憶體洩露,但同時閉包也是非常有用的,因為它可以將某些資料與對該資料的操作進行關聯。
範例:
function demo() { var name = '张三'; // name 是demo()创建的局部变量 function demo1() { //demo1()是demo()中的内部函数(闭包) console.log(name); // 使用父函数中声明的变量 } demo1(); }demo();
執行結果
#函數demo()中建立一個名為name的局部變數和一個名為demo1 ()的內部函數。 demo1()函數只能在demo()函數體內使用。 demo1沒有自己的局部變數。但由於內部函數可以存取外部函數的變量,所以demo1()可以存取父函數demo()中宣告的變數名稱name。但如果有同名變數 name 在demo1中定義,則會使用 自己函數中定義的 name。此範例說明巢狀函數可以存取在其外部作用域中宣告的變數。
如果上面的程式碼改成這樣結果會如何?
function demo() { var name = '张三'; function demo1() { console.log(name); } return demo1; } var newDemo = demo(); newDemo();
運行結果
由運行結果可知兩段程式碼結果一樣,內部函數demo1()在執行前被外部函數傳回形成閉包,在這種情況下,newDemo()是執行demo時所建立的函數demo1的一個引用,所以當呼叫newDemo()時,變數名稱name仍可以傳遞給console.log(name)。
範例
function num(x) { return function(y) { return x + y; };} var num1= num(2); var num2 = num(3); console.log(num1(2));// 4 console.log(num2(2));// 5
運行結果
#定義一個函數num(x)用於接收一個參數x並傳回一個新函數,這個新函數也接收一個參數y並回傳x和y之和;同時定義了兩個新的值num1,num2都為閉包且傳值分別為2,3.
總結:以上就是這篇文章分享的內容了,希望對大家有幫助。
以上是JavaScript中閉包的含義是什麼以及如何使用它的詳細內容。更多資訊請關注PHP中文網其他相關文章!