这是我确定我应该知道答案的事情,但要么我只是愚蠢,要么我以前从未遇到过这个......
给定以下数组,在全局范围内声明:
var arr = [function() {
console.dir(this);
}];
我本来希望this
引用 Window 对象。但是,在调用函数时:
arr[0](); //Logs Array
看来,this
实际上是指数组。然后,当我将对该函数的引用存储在另一个变量中并调用它时,this
确实引用了 Window 对象:
var func = arr[0];
func(); //Logs Window
那么,为什么函数的上下文会改变呢?这是一个演示上述两种情况的小提琴。