首页 新闻 会员 周边 捐助

请教大神 javascript关于闭包 块级作用域的问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-03-07 09:26
var name="window";
    var object = {
        name:"me",
        getname:(function(){
            return function(){
                return this.name;
            }
        })()
    };
    alert(object.getname());    //me


    var name1="window";
    var object1 = {
        name:"me",
        getname:(function(){
            var that=this;
            return function(){
                return that.name;
            }
        })()
    };
    alert(object1.getname());    //window


    var name2="window";
    var object2 = {
        name:"me",
        getname:function(){
            var that=this;
            return function(){
                return that.name;
            }
        }
    };
    alert(object2.getname()());   //me

这三段代码 请大神解答一下 尤其是第二段代码 谢谢了

willsine的主页 willsine | 初学一级 | 园豆:184
提问于:2014-03-05 17:28
< >
分享
最佳答案
0

其实你只要在var that=this;这条语句之前把this打出来看一下就知道了。

对于第二段代码:

getname:(function(){

   var that=this;

   return function(){

     return that.name;

   }

 })()

因为getname的值在定义时就被执行了,所以var that=this中的this已经是Window对象了,但是在返回来的函数体当中

return function(){

 return that.name;

}

this还是object对象。这就是为什么第一段代码返回来的me。

收获园豆:10
danielanlin | 菜鸟二级 |园豆:222 | 2014-03-05 18:06

谢谢 了然 给你点三十二个赞....

willsine | 园豆:184 (初学一级) | 2014-03-06 09:25
其他回答(2)
0

参考一下:http://www.cnblogs.com/mrsunny/archive/2011/11/03/2233978.html

以后豆豆就不要浪费在这种问题上了。

收获园豆:7
飞扬的尘埃 | 园豆:1318 (小虾三级) | 2014-03-05 18:04

scope chain 什么的我懂 关键是自执行这个吧  如果没有自执行 你看:

var name="window";
    var object = {
        name:"me",
        getname:function(){
            var  that = this
            return function(){
                return that.name;
            }
        }
    };
    alert(object.getname());    //me

这是为什么....

支持(0) 反对(0) willsine | 园豆:184 (初学一级) | 2014-03-05 18:13
0

只要能理解到谁去执行函数,那个 this 就是谁

收获园豆:3
Yu | 园豆:12990 (专家六级) | 2014-03-06 09:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册