我刚刚读了凯尔辛普森的书"你不认识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.
但不知何故,我不觉得我完全理解最后一行发生了什么,有人可以为我分解吗?
谢谢.
亚历山大.
最后一行是传递给foo函数的引用,然后在全局范围内执行,就像你看到的那样.它等同于此
var f = p.foo = o.foo;
f();
Run Code Online (Sandbox Code Playgroud)