感谢做者。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,与闭包无关。