私はこの特定の問題を回避する方法を知っていますが、なぜそれが起こるのか知りたいです。基本的に、次のような関数を呼び出そうとすると、次のようになります。
(callFoo ? this.foo : this.bar)();
正しいfoo関数を呼び出しますが、fooの内部は、this
私が期待するオブジェクトではなく、グローバルなウィンドウオブジェクトです。
私はこれが同じことをすることを期待しますが、そうではありません:
(this.foo)();
上記のコードは正しい関数を呼び出し、正しいコンテキストを維持します(this
私が期待しているものです)。
誰かが何が起こっているのか説明してもらえますか?問題を回避する方法は理解していますが(私はその構文のファンでさえありません)、this
三項演算子から関数を返すとなぜウィンドウになるのかを知りたいです。
編集
私は私の質問を洗練したいと思います:これは私にとって理にかなっています:
(callFoo ? this.foo : this.bar)();
と同等です:
var f = (callFoo ? this.foo : this.bar);
f();
this
そして、なぜその関数内のウィンドウになるのかは私には理にかなっています。
ここで同じことが起こらないのはなぜですか。
(this.foo)();