using()强制JavaScript解释器首先求值

问题描述 投票:0回答:1

我正在学习Js。在阅读YDKJS系列时,我举了一个例子,并努力地弄清正在发生的事情。

function foo() {
  console.log(this.a);
}

var a = 90;

var obj1 = {
  a: 1,
  foo: foo
};

var obj2 = {
  a: 2
};

(obj2.foo = obj1.foo)(); //90
obj2.foo(); //2

在此代码段中,为什么(obj2.foo = obj1.foo)(); foo的this变量指向全局对象,在下一行中,它指向obj2,即在该上下文中调用了函数。你能告诉我,我在这里想念的是什么。 ()在obj2.foo = obj1.foo中的正确作用是什么。 IIFE中使用了相同的语法。有人可以解释一下吗?

javascript this
1个回答
0
投票

这是不相同的语法。 JavaScript不会区分方法和函数作为值,这种区分纯粹是在方法call中。语法receiver.method(...args)(如果receiver.method是非箭头函数)作为方法调用,即在调用过程中会将this设置为receiver。任何其他函数调用语法都只是一个函数调用,而不会影响this。具体来说,(obj2.foo = obj1.foo)只是一个函数,不知道应将其发送给哪个接收者。

© www.soinside.com 2019 - 2024. All rights reserved.