闭包里的this作用域
作者 斯人 | 发布于 2012 年 3 月 22 日
PHP PHP内核

这两天事好多啊。。。好几天没更新博客了。
关于this对象,有一点一定要记住:this对象是在运行时基于函数的执行环境绑定。
明白这个就好说了。。
看如下代码

var name='this is windows';
var obj={
    name:'this is obj',
    getname:function(){
        return function(){
            return this.name;
        }
    }
}
alert(obj.getname()())

弹出 this is windows;
obj.getname()执行返回的是一个 函数,两个括号就是要执行返回的函数。因为该函数是在windows作用域中执行的,
所以 这个this对象 指向的是windows作用域 而非 obj的作用域
再看

var name='this is windows';
var obj={
    name:'this is obj',
    getname:(function(){
        alert(this.name)
    })()
}

同样 该代码 弹出 this is windows;
因为 getname函数会在页面加载的时候就执行,
而执行环境是在windows下执行的,所以this 指向的就是windows作用域。
千万不要理解为 写在obj体里就认为this对象肯定指向obj体。。这是错误的。。
this对象是在运行时基于函数的执行环境绑定。

原文出处:http://www.imsiren.com/archives/441