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);
有谁可以解释为什么看似等效的这两个函数会产生不同的结果?
答案 0 :(得分:5)
因为在您的第一个示例中,在您的函数调用完成之后才会分配a
。
详细地说,这是第一个例子中发生的事情:
a
作为this
参数调用该函数。a
仍然未定义,this
会重新回到window
。undefined
,分配给a
。答案 1 :(得分:3)
var a = function() {
alert( this ); // [object Window]
alert( a ); // undefined
}.call( a );
a
这里成为评估函数的结果:即a = (function() { ... }).call(a)
,而不是函数本身。
答案 2 :(得分:0)
在第一个示例中,在调用函数之前不会分配a
,因此a
未定义。
答案 3 :(得分:-2)
尝试这样,
var a = function() {...}
a.call(a)