为什么当我尝试将函数绑定到自身时,"this"对象仍然引用窗口?


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直到对函数的调用完成后才会被分配。

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

  1. 定义了匿名函数。
  2. 使用 a 作为this参数调用该函数。
  3. 该函数将执行,但由于a仍未定义,因此this回退到window
  4. 该函数返回 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)

最新更新