2
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);

一見同等に見えるこれらの2つの関数が異なる結果をもたらす理由を誰かが説明できますか?

4

4 に答える 4

5

最初の例aでは、関数の呼び出しが完了するまで割り当てられないためです。

詳細には、最初の例で何が起こるかを次に示します。

  1. 匿名関数が定義されています。
  2. この関数はathisパラメータとして使用して呼び出されます。
  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 に答える