Javascript 为什么';这';指向';窗口';在iife中使用赋值运算符时的obj?
我想知道为什么示例会返回'global'而不是'obj2'?(obj2.say=obj1.say)和(obj2.say)之间有什么不同? 代码如下:Javascript 为什么';这';指向';窗口';在iife中使用赋值运算符时的obj?,javascript,iife,Javascript,Iife,我想知道为什么示例会返回'global'而不是'obj2'?(obj2.say=obj1.say)和(obj2.say)之间有什么不同? 代码如下: var text='global'; var obj1={text:'obj1',比如:function(){console.log(this.text)}; var obj2={text:'obj2'}; (obj2.say=obj1.say)()(obj2.say)(将从obj2调用say函数 (obj2.say=obj1.say)(将obj
var text='global';
var obj1={text:'obj1',比如:function(){console.log(this.text)};
var obj2={text:'obj2'};
(obj2.say=obj1.say)()
(obj2.say)(
将从obj2
调用say
函数
(obj2.say=obj1.say)(
将obj1.say
分配给obj2.say
,然后调用它
我不确定this.text
-我希望有人能帮上忙-甚至我也很想找到答案。因为(obj2.say=obj1.say)的值是一个普通的函数对象,而obj2.say()是obj2的方法调用。赋值的结果就是赋值的值。例如:
var foo, bar;
foo = (bar = 42);
console.log(foo); // 42
因此,当执行(obj2.say=obj1.say)
时,分组运算符返回的赋值结果是obj1.say
中的函数对象
整个表达式要等价于
var result = obj2.say = obj1.say;
result();
当函数以“正常”方式调用时(func()
)
(obj2.say)(
实际上很特别。仅分组运算符不能解析(内部)对值的引用。也就是说,obj2.say
的结果在内部是一个引用,它描述了obj2
上的成员访问say
。分组运算符,(…)
返回未更改的引用,而不是将其解析为实际的函数对象。这就是为什么此
将正确指向obj2
。省略分组运算符具有相同的效果
这实际上是:
该算法不适用于表达式求值的结果。这样做的主要动机是,诸如delete
和typeof
之类的运算符可以应用于括号内的表达式
这里没有生命。@FelixKling-不是传统意义上的,但是
(obj2.say=obj1.say)
是一个计算结果为函数的表达式,该函数立即被调用。。。(是的,你说得对。)我希望它能回来。有趣的是,@nnnnnn是对的…result=obj2.say=obj1.say
是我在自己(现在已放弃)的答案中努力给出的解释。干得好。