javascript - Js でのこれに関する質問
为情所困
为情所困 2017-07-05 10:37:50
0
5
984
リーリー

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

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

为情所困
为情所困

全員に返信(5)
巴扎黑
  1. 関数名を使用して直接呼び出します。何層にラップしても、呼び出し元は window です。

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

いいねを押す +0
学霸

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

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

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

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

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

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

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

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

いいねを押す +0
扔个三星炸死你

この質問に関する限り。

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

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

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

いいねを押す +0
巴扎黑

リーリー

いいねを押す +0
我想大声告诉你

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート