您好,匿名用户
随意问技术百科期待您的加入

js的全局作用域和对象作用域的问题

+2 投票
var a = 'global';
var obj = {
        a : 'local',
        test : function(){
                function test1(){
                        alert(this.a);//global
                }
                alert(this.a);//local

                test1();//所有者是window
        }
};
obj.test();

为什么第一个a弹出的值是global 它的this指向了window
是因为test1()函数的作用域属于全局作用域吗?为什么不是obj呢?

用户头像 提问 2013年 1月24日 @ Libra 上等兵 (351 威望)
分享到:

1个回答

+2 投票
 
最佳答案

在Douglas Crockford的《JS语言精粹》中有讲到:

当一个函数并非一个对象的属性时,那么他就是被当做一个函数来调用的:

var sum = add(3,4);//add()在前面已经定义

以此模式调用的函数,this被绑定到全局 对象。这是语言设计上的一个错误。

所以 test1()是函数调用模式,此时的this已经是window对象了。

可以参考this的问题

用户头像 回复 2013年 1月24日 @ 正能量 上等兵 (297 威望)
选中 2013年 1月24日 @Libra
提一个问题:

相关问题

0 投票
1 回复 33 阅读
用户头像 提问 2012年 12月1日 @ Caitlyn 上等兵 (452 威望)
0 投票
1 回复 39 阅读
0 投票
0 回复 18 阅读
0 投票
1 回复 29 阅读
0 投票
1 回复 32 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...