JavaScript中的双重括号是什么?

3

我在一本书中找到了这段代码:

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

var a = 2;
var o = { a: 3, foo: foo };
var p = { a: 4 };
o.foo(); // 3
(p.foo = o.foo)(); // 2

最后一行是什么意思?
1个回答

5
最后一行是赋值并调用函数。
先执行赋值操作。
(p.foo = o.foo)

然后调用该函数。
(p.foo = o.foo)();

在第二次调用foo时,它被调用处于p或o的范围之外,因此它本质上与调用以下内容相同:

foo();

这是否等同于 p.foo = o.foo; p.foo(); - user1272913
1
@user1272913:它们并不等价。函数调用中this的值将是window对象,因为该函数作为括号的结果与任何对象分离。这更相当于var f = (p.foo = o.foo); f(); - user1106925
我更新了我的答案,一开始没有注意到你所询问的值。 - ohiodoug
你正在分配一个函数的引用,然后调用该函数。 - ohiodoug
1
好的,我明白了:这相当于 c=p.foo=o.foo;c()。 - user1272913
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接