【发布时间】:2015-12-27 23:56:33
【问题描述】:
我在一本书中找到了这段代码:
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
最后一行是什么意思?
【问题讨论】:
标签: 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
最后一行是什么意思?
【问题讨论】:
标签: javascript syntax
最后一行是做赋值,然后调用函数。
分配首先发生
(p.foo = o.foo)
然后调用函数
(p.foo = o.foo)();
在对 foo 的第二次调用中,它是在 p 或 o 的范围之外被调用的,所以它本质上与调用相同:
foo();
【讨论】:
this 的值将是window 对象,因为作为括号的结果,函数与任何对象分离。它更相当于var f = (p.foo = o.foo); f();
(p.foo = o.foo)(); 中,您正在分配一个函数,然后在任一变量的范围之外调用它,因此使其使用定义为 2 的变量 a。