關於JS的閉包

 

首先關於閉包的理解。閉包

我的認爲,閉包是定義在局部變量的語境中,能獲取該語境中全部變量的函數。函數

摘自阮一峯博客的例子this

代碼片斷一。get

  var name = "The Window";博客

  var object = {
    name : "My Object",io

    getNameFunc : function(){
      return function(){
        return this.name;
      };function

    }匿名函數

  };變量

  alert(object.getNameFunc()());object


代碼片斷二。

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());

第一個例子輸出"The Window"; 第二個例子輸出 "My Object"

下面分析一下兩個例子的不一樣之處,首先理解this是代碼被執行時的環境 第一個例子中執行的是全局的this 第二個例子執行的是object的this

換句話說,第一個例子之因此輸出"The Window" 是由於object裏面的代碼徹底沒有被執行

其實很容易理解,第一個例子中object.getNameFunc()返回的是匿名函數,這個函數中沒有使用object的變量 因此並不屬於object的成員 於是是全局的成員 因此返回的this就是全局的this

第二個例子中,var that = this;發生在object的語境中,因此返回的是object的this

相關文章
相關標籤/搜索