首頁  >  文章  >  web前端  >  JS中的閉包詳解

JS中的閉包詳解

小云云
小云云原創
2018-03-26 15:55:261166瀏覽

本文主要和大家分享JS中的閉包詳解,主要以程式碼的方式和大家講解,希望能幫助大家。

var n = 999;
function f1() {
  console.log(n);
}
f1() // 999

JavaScript有兩種作用域:全域作用域和函數作用域。函數內部可以直接讀取全域變數。函數 f1 可以讀取全域變數 n。但是,在函數外部無法讀取函數內部宣告的變數。

function f1() {
  var n = 99;
}
console.log(n);

但是,有時我們需要在函數外部存取函數內部的變數;正常情況下,這是辦不到的,只有透過變通方法才能實現。那就是在函數的內部,再定義一個函數。

function f1() {
  var n = 999;
  var f2 = function() {
      console.log(n);
  }
return f2;
}
var f = f1();
f();

上面程式碼中,函數f2就在函數f1內部 這時f1內部的所有局部變量,對f2都是可見的。但反過來不行,f2內部的局部變數 對f1就是不可見的。這就是JavaScript語言特有的」鍊式作用域」結構(chain scope) ,子物件會一級一級地向上尋找所有父物件的變數。所以,父物件的所有變量,對子物件都是可見的,反之則不成立。

既然f2可以讀取f1的局部變量, 那麼只要把f2作為回傳值, 我們不就可以在f1#外部讀取它的內部變數了。閉包就是函數f2,能夠讀取其他函數內部變數的函數。由於在JavaScript語言中,只有函數內部的子函數才能讀取內部變量, 因此可以把閉包簡單理解成「定義在一個函數內部的函數」。閉包最大的特點,就是它可以「記住」誕生的環境, 例如f2記住了它誕生的環境f1, 所以從f2可以得到f1的內部變數。在本質上,閉包就是將函數內部和函數外部連結起來的一座橋樑。即閉包的最大用處有兩個,一個是可以讀取函數內部的變量,另一個就是讓這些變量始終保持在內存中,即閉包可以使得它誕生環境一直存在;
相關推薦:

JS中的閉包簡單解釋

js中的閉包是如何使用的?

淺聊js中的閉包_javascript技巧

以上是JS中的閉包詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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