foo2() はアロー関数を使用します。
call の理解によれば、foo.call({id:23}) は 0 ではなく 23 を出力するはずです。それで、誰かこれを説明できますか?
コードは次のとおりです:
<script type="text/javascript">
</script>
実行結果:
0
2
迷茫2017-06-26 10:52:10
foo
函数里面的 this
还是 {id:23}
但是到了 setTimeout
接受的回掉里面, this
就变为了 window
所以就输出了全局的 0,第二个因为箭头函数,this
与 foo2
的 this
バインディングなので2
typecho2017-06-26 10:52:10
foo2 の setTimeout のパラメータはアロー関数であり、その中の this は、ランタイムが存在するスコープを指すのではなく、バインディング定義があるスコープ (foo2 が実行されるとき、これは呼び出し内のオブジェクトです) です。 。通常の setTimeout の関数は、実行時スコープ (ウィンドウ) にバインドされます。
巴扎黑2017-06-26 10:52:10
明らかに、最初の this はウィンドウを指し、2 番目のアロー関数 this は現在のオブジェクトを指します。つまり、それを呼び出す人は誰でもそれを指すことになります。
最初の関数は、問題を解決するために変更できます。
リーリー
曾经蜡笔没有小新2017-06-26 10:52:10
1. setTimeout のコールバック関数は foo が実行されてから 100ms 後に実行され、実行時スコープは window です。
2. アロー関数を使用すると、setTimeout で this を、実行されるスコープを指すのではなく、定義されているスコープにバインドできます。