双倍括号javascript

use*_*913 3 javascript syntax

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

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
Run Code Online (Sandbox Code Playgroud)

最后一行是什么意思?

ohi*_*oug 5

最后一行是做一个赋值然后调用该函数.

分配首先发生

(p.foo = o.foo)
Run Code Online (Sandbox Code Playgroud)

然后调用该函数

(p.foo = o.foo)();
Run Code Online (Sandbox Code Playgroud)

在第二次调用foo时,它被调用到p或o的范围之外,所以它与调用基本相同:

foo();
Run Code Online (Sandbox Code Playgroud)