検索

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

javascript - Js でのこれに関する質問

リーリー

この質問に関して、js の this が呼び出した人を指しているかどうか知りたいです。初めて呼び出されたときに、cl の this がオブジェクトではなくウィンドウを指しているのはなぜですか? call を使用しないとおそらく間違っていることはわかっていますが、なぜ間違っているのでしょうか?
なぜ 2 番目の文は引数を指しているのでしょうか?

同時に、nodejs で実行したときのこのコードの最初の出力が uniffed になるのはなぜですか?

为情所困为情所困2741日前994

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

  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    1. 関数名を使用して直接呼び出します。何層にラップしても、呼び出し元は window です。

    2. 角括弧演算子はオブジェクト値の演算であるため、ある意味、それを指す点 .运算符的,所以这里在形式上其实可以类比成arguments.0(),你看,这不就是arguments来调用了这个函数了嘛,所以运行的时候this と等しくなります。

    返事
    0
  • 欧阳克

    欧阳克2017-07-05 10:39:50

    これのポイントは、宣言時に決定されるのではなく、呼び出された時に定義されるという点です。いくつかの状況があります。

    1. 通常の関数呼び出し、これはグローバルオブジェクトまたは未定義です

    2. オブジェクトのメソッドとしては、これがそのオブジェクトです

    3. 新しい式、これはこの関数によってプロトタイプ化された新しく作成されたオブジェクトです

    4. これを指定するには apply/call を使用します

    5. これを修正するにはバインドを使用してください

    6. イベント処理関数内のこれは、イベントをトリガーする現在の DOM 要素 (event.currentTarget) です

    お役に立つかわかりません

    返事
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:39:50

    この質問に関する限り。

    1. o.show() が実行され、show 関数のスコープで使用される this は o を指します。
      しかし、実際には fn() が内部で呼び出されており、fn は o によって呼び出されず、o.fn は存在しません...比較的低い原則は、関数呼び出しポイントの前にいる人が関数内でこれになるということです。 これはデフォルトのウィンドウである必要があります。

    2. arguments[0] ==> arguments.0
      配列もオブジェクトであり、[] 呼び出しは . と同じであるため、これは引数です

    3. ノードに関してはモジュール化されているのでグローバルを指しており、var宣言時にブラウザのようなウィンドウコールはありません。ノードにはそのようなメカニズムはありません。

    返事
    0
  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    リーリー

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:39:50

    o.show()this指向o,但和本题无关。
    o.show()中的fn标识符解析得到一个引用类型(内部类型),其base属性(本题中值为show()方法的活动对象)即是this的指向。因为活动对象返回null,所以this指向null,从而指向了window
    arguments[0]()arguments[0]同样返回一个引用类型,其base属性的值为arguments,所以this指向arguments

    返事
    0
  • キャンセル返事