84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
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 を、実行されるスコープを指すのではなく、定義されているスコープにバインドできます。
アロー関数スコープの問題