JavaScript 中閉包的this指向

感謝做者。javascript

閉包的定義:java

      閉包是在另外一個函數(稱爲父函數)中定義的函數,而且能夠訪問在父函數做用域中聲明和定義的變量。編程

  閉包能夠訪問三個做用域中的變量閉包

  一、在本身做用域中聲明的變量編程語言

  二、在父函數中聲明的變量函數

  三、在全局做用域中聲明的變量this

 

var t={
    b:1,
    w:function a(){
        var b=2;
        alert(this.b);   //彈出t對象的b屬性
        alert(b);        //彈出a函數的b變量
        return function c(){
            alert(this.b);//彈出window對象的b屬性
       }
    }
}
var b=3;
var q=t.w();//先彈出1,再彈出2。此式子獲得了閉包c,c==q
q();        //彈出3,c的調用,至關於c();
//w(或者說a)能夠經過.由對象t調用,閉包c的調用直接發生在window中,至關於window.q()

在執行環境中,this的指向只是與如何調用這個方法有關。code

閉包不屬於任何對象,它不是一個對象的方法(就不能使用點運算符調用)。對象

由於js是面向對象的編程語言,全部變量和函數要指定屬於某個對象,若是沒有指定屬於哪一個對象,那麼它就屬於window對象。ip

調用一個變量或者函數必須指定經過哪一個對象調用,例如t對象裏的w方法,須要經過點運算符由t調用,就是t.w(),而t.w()獲得了閉包c。

此時直接調用c就能夠了:t.w()(),至關於c()。注意c是直接調用的,沒有經過哪一個對象,因此默認屬於window。

請注意,:t.w()()中的點運算符調用的是w,與閉包無關。  

相關文章
相關標籤/搜索