以下のコード スニペットで、window.foo が存在するのに、this.bar が定義されていないのはなぜですか?
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
以下のコード スニペットで、window.foo が存在するのに、this.bar が定義されていないのはなぜですか?
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
ブラウザーでは、window はグローバル オブジェクトであるため、シャドウされていない限り、どこでも使用できます。this
メソッドとして呼び出される関数の本体で有用なものを指しているだけです。in foo.bar() - in bar
、this
is foo
、または引数を指定して bar.call(...) または bar.apply(...) が呼び出されたthis
とき、または完全に関数呼び出しの外にいるとき。グローバル オブジェクト (ウィンドウ) を指します。
これを空のオブジェクトに設定する foo.call({}) を明示的に実行しています。したがって、その呼び出し中に this.bar は存在しません。