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,与闭包无关。  

相关文章
相关标签/搜索