検索

ホームページ  >  に質問  >  本文

JavaScript でのこれに関するパズル

どのオブジェクトがこの関数を呼び出すか、この関数の this がこのオブジェクトを指しているという情報をたくさん見てきました。
次の例では、関数 foo がステートメント foo() を通じて呼び出されます。これがグローバル世界を指すのはなぜですか? Window.foo() はグローバル オブジェクトによって呼び出されるのではありませんか?
アドバイスをお願いします、ありがとうございます!

リーリー
代言代言2788日前938

全員に返信(7)返信します

  • 给我你的怀抱

    给我你的怀抱2017-06-26 10:54:59

    上の階で言われたことには問題があります。Foo はグローバル変数ではありません。(非厳密モード) を判断する簡単な方法は次のとおりです。
    1. 関数に上位オブジェクトが割り当てられていない場合、これはウィンドウ
    2 を指します。関数が割り当てられている場合、上位オブジェクトに関しては、 foo.fn.o() のような、最も近い上位 (親) オブジェクトのみを指します。

    返事
    0
  • 高洛峰

    高洛峰2017-06-26 10:54:59

    コメントに書きましたが、こんな感じです

    リーリー

    返事
    0
  • 代言

    代言2017-06-26 10:54:59

    の場合、正しい設計方法は、内部関数の this をその外部関数に対応するオブジェクトにバインドすることであり、これが上記の問題を引き起こします。 内部函数,即声明在另一个函数体内的函数,都将会绑定到全局对象上,这是JavaScript的设计缺陷

    この設計上の欠陥を回避するには、

    を使用できます。コードは次のとおりです: 变量替代的方法,约定俗成,可以使用selfthat リーリー

    返事
    0
  • PHP中文网

    PHP中文网2017-06-26 10:54:59

    まず第一に、1 つの真実を理解しましょう:
    1: 窓もオブジェクトであり、特別なオブジェクトであり、全世界を表します。 次の方法で関数を呼び出す場合:
    function foo(){....}
    foo();//
    2 行目のこの呼び出しメソッド (関数の前に定義したオブジェクトはありません) , これを「グローバルコール」と呼びます。実際、これは window.foo() と同等です。それで、見ましたか?このときのオブジェクトは window であるため、関数をグローバルに呼び出すことは、実際にはオブジェクトに対して関数を呼び出す特殊なケースです。
    2: では、なぜ上記のコードは obj ではなくグローバルに foo() を呼び出すのでしょうか?コードを変更して 20:

    を出力させます リーリー

    2 つのコードを比較して、違いを見つけてください。

    返事
    0
  • 某草草

    某草草2017-06-26 10:54:59

    リーリー リーリー

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:54:59

    コードは次のように書き換えることができます:

    リーリー

    上記の例を通して、関数を呼び出す際に、JavaScript パーサーが call または apply の形式で呼び出されることが理解できます。 このように、関数内でこれに値を指定します。これら 2 つのメソッドの最初のパラメータは、呼び出し時の foo メソッドの内部 this 値です。call メソッドの最初のパラメータが null または未定義の場合、デフォルトでグローバル オブジェクトが最初のパラメータとして使用されます (試してみることもできます)。 foo.call()、foo.call(null)、foo.call(unknown)) を試してください

    返事
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-26 10:54:59

    関数内の関数、このポインタが失われます

    返事
    0
  • キャンセル返事