この質問に関して、js の this が呼び出した人を指しているかどうか知りたいです。初めて呼び出されたときに、cl の this がオブジェクトではなくウィンドウを指しているのはなぜですか? call を使用しないとおそらく間違っていることはわかっていますが、なぜ間違っているのでしょうか? なぜ 2 番目の文は引数を指しているのでしょうか?
call
同時に、nodejs で実行したときのこのコードの最初の出力が uniffed になるのはなぜですか?
関数名を使用して直接呼び出します。何層にラップしても、呼び出し元は window です。
window
角括弧演算子はオブジェクト値の演算であるため、ある意味、それを指す点 .运算符的,所以这里在形式上其实可以类比成arguments.0(),你看,这不就是arguments来调用了这个函数了嘛,所以运行的时候this と等しくなります。
.
arguments.0()
arguments
this
これのポイントは、宣言時に決定されるのではなく、呼び出された時に定義されるという点です。いくつかの状況があります。
この質問に関する限り。
o.show() が実行され、show 関数のスコープで使用される this は o を指します。 しかし、実際には fn() が内部で呼び出されており、fn は o によって呼び出されず、o.fn は存在しません...比較的低い原則は、関数呼び出しポイントの前にいる人が関数内でこれになるということです。 これはデフォルトのウィンドウである必要があります。
arguments[0] ==> arguments.0配列もオブジェクトであり、[] 呼び出しは . と同じであるため、これは引数です
arguments[0] ==> arguments.0
ノードに関してはモジュール化されているのでグローバルを指しており、var宣言時にブラウザのようなウィンドウコールはありません。ノードにはそのようなメカニズムはありません。
リーリー
o.show()的this指向o,但和本题无关。o.show()中的fn标识符解析得到一个引用类型(内部类型),其base属性(本题中值为show()方法的活动对象)即是this的指向。因为活动对象返回null,所以this指向null,从而指向了window。arguments[0]()的arguments[0]同样返回一个引用类型,其base属性的值为arguments,所以this指向arguments。
o.show()
o
fn
base
show()
null
arguments[0]()
arguments[0]
関数名を使用して直接呼び出します。何層にラップしても、呼び出し元は
window
です。角括弧演算子はオブジェクト値の演算であるため、ある意味、それを指す点
.
运算符的,所以这里在形式上其实可以类比成arguments.0()
,你看,这不就是arguments
来调用了这个函数了嘛,所以运行的时候this
と等しくなります。これのポイントは、宣言時に決定されるのではなく、呼び出された時に定義されるという点です。いくつかの状況があります。
この質問に関する限り。
o.show() が実行され、show 関数のスコープで使用される this は o を指します。
しかし、実際には fn() が内部で呼び出されており、fn は o によって呼び出されず、o.fn は存在しません...比較的低い原則は、関数呼び出しポイントの前にいる人が関数内でこれになるということです。 これはデフォルトのウィンドウである必要があります。
arguments[0] ==> arguments.0
配列もオブジェクトであり、[] 呼び出しは . と同じであるため、これは引数です
ノードに関してはモジュール化されているのでグローバルを指しており、var宣言時にブラウザのようなウィンドウコールはありません。ノードにはそのようなメカニズムはありません。
リーリー
o.show()
的this
指向o
,但和本题无关。o.show()
中的fn
标识符解析得到一个引用类型(内部类型),其base
属性(本题中值为show()
方法的活动对象)即是this
的指向。因为活动对象返回null
,所以this
指向null
,从而指向了window
。arguments[0]()
的arguments[0]
同样返回一个引用类型,其base
属性的值为arguments
,所以this
指向arguments
。