在javascript中间接引用函数

Ale*_*nik 2 javascript

我刚刚读了凯尔辛普森的书"你不认识JS",并且遇到了以下有些困惑我的代码.基本上我正在阅读this关键字的主题.以下是片段:

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)

到目前为止,阅读这本书,我确实理解这是如何工作的,但对我来说,很难理解最后一行片段中是否真的发生了什么.

如果我自己分析它的最后一行是iffe在全局范围内执行,如果在iffe中foo()函数执行,foo()函数中的this.a将指向全局范围中的a,这是确实2.

但不知何故,我不觉得我完全理解最后一行发生了什么,有人可以为我分解吗?

谢谢.

亚历山大.

Ste*_*ham 5

最后一行是传递给foo函数的引用,然后在全局范围内执行,就像你看到的那样.它等同于此

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