0

以下のコード スニペットで、window.foo が存在するのに、this.bar が定義されていないのはなぜですか?

function foo() { 
  function bar() {  }; 
  console.log(this.bar); 
}

console.log(window.foo);
foo.call({});
4

1 に答える 1

-1

ブラウザーでは、window はグローバル オブジェクトであるため、シャドウされていない限り、どこでも使用できます。thisメソッドとして呼び出される関数の本体で有用なものを指しているだけです。in foo.bar() - in barthisis foo、または引数を指定して bar.call(...) または bar.apply(...) が呼び出されたthisとき、または完全に関数呼び出しの外にいるとき。グローバル オブジェクト (ウィンドウ) を指します。

これを空のオブジェクトに設定する foo.call({}) を明示的に実行しています。したがって、その呼び出し中に this.bar は存在しません。

于 2013-05-07T18:13:56.983 に答える