2
var a = function() {

  alert( this ); // [object Window]
  alert(  a   ); // undefined

}.call( a );

为什么this仍然引用window对象和aundefined。或者,当我按照以下方式进行操作时,this等于函数a未定义。

var a = function() {

  return this === a; // true

};

a.call(a);

谁能解释为什么这两个看似等效的函数会给出不同的结果?

4

4 回答 4

5

因为在您的第一个示例a中,直到您的函数调用完成后才分配。

详细地说,这是第一个示例中发生的情况:

  1. 定义了匿名函数。
  2. 使用a作为this参数调用该函数。
  3. 该函数执行,但由于a仍未定义,因此this回退到window
  4. 函数返回undefined,它被分配给a
于 2012-08-08T17:49:10.163 回答
3
var a = function() {

  alert( this ); // [object Window]
  alert(  a   ); // undefined

}.call( a );

a这里成为评估函数的结果:即a = (function() { ... }).call(a),而不是函数本身。

于 2012-08-08T17:50:13.873 回答
0

在第一个示例中,a直到调用函数后才分配,因此a未定义。

于 2012-08-08T17:49:19.230 回答
-2

试试这样

var a = function() {...}
a.call(a)
于 2015-12-23T23:48:02.000 回答