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