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