首頁  >  文章  >  web前端  >  JavaScript中閉包的含義是什麼以及如何使用它

JavaScript中閉包的含義是什麼以及如何使用它

清浅
清浅原創
2018-11-17 11:08:032529瀏覽



這篇文章將分享關於JavaScript中閉包的知識點,有一定的參考價值,希望對大家有所幫助

閉包是函數和宣告該函數的詞法環境的組合,當內部函數被保存到外部時,將會產生閉包而閉包會導致原有作用域鏈不釋放,造成記憶體洩露,但同時閉包也是非常有用的,因為它可以將某些資料與對該資料的操作進行關聯。

範例:

function demo() {
  var name = '张三'; // name 是demo()创建的局部变量
  function demo1() { //demo1()是demo()中的内部函数(闭包)
    console.log(name); // 使用父函数中声明的变量  
    }
  demo1();  
    }demo();

執行結果

Image 1.jpg

#函數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();

運行結果

Image 1.jpg

由運行結果可知兩段程式碼結果一樣,內部函數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

運行結果

Image 2.jpg

#定義一個函數num(x)用於接收一個參數x並傳回一個新函數,這個新函數也接收一個參數y並回傳x和y之和;同時定義了兩個新的值num1,num2都為閉包且傳值分別為2,3.

總結:以上就是這篇文章分享的內容了,希望對大家有幫助。



以上是JavaScript中閉包的含義是什麼以及如何使用它的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn