为了账号安全,请及时绑定邮箱和手机立即绑定

是因为test1()函数的作用域属于全局作用域吗?为什么不是obj呢?

是因为test1()函数的作用域属于全局作用域吗?为什么不是obj呢?

慕莱坞森 2023-04-25 16:12:34
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
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

方法调用的时候,会有this指针的传递
例如:
a.doSomething();
那么,在doSomething这个函数域中,this指针指向的就是对象a

如果直接调用doSomething(),那么,this指针指向的是全局对象,即window


查看完整回答
反对 回复 2023-04-28
?
ITMISS

TA贡献1871条经验 获得超8个赞

function test1(){    alert(this.a);//global}

上面格式的声明函数都是全局作用域

test1 = function() {}
or
{test1 : function() {}}

这种格式声明的函数则距具有和变量(属性)相同的作用域


查看完整回答
反对 回复 2023-04-28
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

this的指向是在执行的时候绑定的。this指向和函数调用的方式有关。obj.test()是test作为对象的方法调用的,所以test中的this指向这个对象,因此输出obj中的a;而test1()在虽然在test中执行,但是和作用域无关。作为函数直接调用的,所以这个this指向了window,因此输出window中的a。

查看完整回答
反对 回复 2023-04-28
  • 3 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信