1. 程式人生 > >理解閉包的含義以及他的使用

理解閉包的含義以及他的使用

var urn 執行 標識 nbsp 函數 返回 con 訪問

1、什麽是閉包,
  閉包就是能夠讀取其它函數內部的變量。

首先我們來看一段代碼:
function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); //控制臺輸出1,再輸出2

再來看一段代碼:
function a(){
    var n = 0;
    this.inc = function () {
        n++; 
        console.log(n);
    };
}
var c = new a();
c.inc();    //控制臺輸出1
c.inc();    //控制臺輸出2

這就是閉包,是不是很簡單!

這裏 inc 函數訪問了構造函數 a 裏面的變量 n,所以形成了一個閉包。再來看一段代碼:

function a(){
    var n = 0;
    function inc(){
       n++; 
console.log(n); } return inc; } var c = a(); c(); //控制臺輸出1 c(); //控制臺輸出2

看看是怎麽執行的:

var c = couter(),這一句 couter()返回的是函數 inc,那這句等同於 var c = inc;

c(),這一句等同於 inc(); 註意,函數名只是一個標識(指向函數的指針),而()才是執行函數。

後面三句翻譯過來就是: var c = inc; inc(); inc();,跟第一段代碼沒有區別。

理解閉包的含義以及他的使用