var a = function() {
alert( this ); // [object Window]
alert( a ); // undefined
}.call( a );
为什么this
仍然引用窗口对象并且a
未定义。或者,当我按以下方式执行此操作时,this
等于函数a
不是未定义的。
var a = function() {
return this === a; // true
};
a.call(a);
谁能解释为什么这两个看似等价的函数会给出不同的结果?
因为在您的第一个示例中,a
直到对函数的调用完成后才会被分配。
详细地说,下面是第一个示例中发生的情况:
- 定义了匿名函数。
- 使用
a
作为this
参数调用该函数。 - 该函数将执行,但由于
a
仍未定义,因此this
回退到window
。 - 该函数返回
undefined
,分配给a
。
var a = function() {
alert( this ); // [object Window]
alert( a ); // undefined
}.call( a );
a
这里成为函数求值的结果:即a = (function() { ... }).call(a)
,而不是函数本身。
在第一个示例中,a
直到调用函数后才分配,因此a
未定义。
试试这样,
var a = function() {...}
a.call(a)