2015-12-27 3 views

ответ

5

Последняя строка выполняет назначение, а затем вызывает функцию.

Назначение происходит первый

(p.foo = o.foo) 

Затем вызовите функцию

(p.foo = o.foo)(); 

В этом втором вызове Foo, она вызывается вне сферы р или о, так что по существу то же самое в качестве вызывающего:

foo(); 
+0

это равно p.foo = o.foo; p.foo(); – user1272913

+0

, но если вы запустите код (p.foo = o.foo)(); отпечатки 2 p.foo = o.foo; p.foo(); отпечатки 4 – user1272913

+1

@ user1272913: Они не эквивалентны. Значение 'this' в вызове функции будет объектом' window', потому что функция в результате parens отделяется от любого объекта. Это больше эквивалентно 'var f = (p.foo = o.foo); f(); ' –