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的指向只是与如何调用这个方法有关。闭包不属于任何对象,它不是一个对象的方法(就不能使用点运算符调用)。因为js是面向对象的编程语言,所有变量和函数要指定属于某个对象,如果没有指定属于哪个对象,那么它就属于window对象。调用一个变量或者函数必须指定通过哪个对象调用,例如t对象里的w方法,需要通过点运算符由t调用,就是t.w(),而t.w()得到了闭包c。此时直接调用c就可以了:t.w()(),相当于c()。注意c是直接调用的,没有通过哪个对象,所以默认属于window。请注意,:t.w()()中的点运算符调用的是w,与闭包无关。
如果觉得文章写得赞,请点赞支持,多谢
如有错误请指正。