javascript - js 呼び出しの問題、非常に単純なコード、出力結果をどう解釈するか?
phpcn_u1582
phpcn_u1582 2017-06-26 10:50:10
0
6
734

foo2() はアロー関数を使用します。
call の理解によれば、foo.call({id:23}) は 0 ではなく 23 を出力するはずです。それで、誰かこれを説明できますか?
コードは次のとおりです:
<script type="text/javascript">

リーリー

</script>

実行結果:
0
2

phpcn_u1582
phpcn_u1582

全員に返信(6)
迷茫

foo 函数里面的 this 还是 {id:23} 但是到了 setTimeout 接受的回掉里面, this 就变为了 window 所以就输出了全局的 0,第二个因为箭头函数,thisfoo2thisバインディングなので2

いいねを押す +0
typecho

foo2 の setTimeout のパラメータはアロー関数であり、その中の this は、ランタイムが存在するスコープを指すのではなく、バインディング定義があるスコープ (foo2 が実行されるとき、これは呼び出し内のオブジェクトです) です。 。通常の setTimeout の関数は、実行時スコープ (ウィンドウ) にバインドされます。

いいねを押す +0
代言

1. foo 関数の this は window、foo2 関数の this はオブジェクト {id: 2} です。

いいねを押す +0
巴扎黑

明らかに、最初の this はウィンドウを指し、2 番目のアロー関数 this は現在のオブジェクトを指します。つまり、それを呼び出す人は誰でもそれを指すことになります。
最初の関数は、問題を解決するために変更できます。 リーリー

いいねを押す +0
曾经蜡笔没有小新

1. setTimeout のコールバック関数は foo が実行されてから 100ms 後に実行され、実行時スコープは window です。
2. アロー関数を使用すると、setTimeout で this を、実行されるスコープを指すのではなく、定義されているスコープにバインドできます。

いいねを押す +0
伊谢尔伦

アロー関数スコープの問題

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