ホームページ  >  に質問  >  本文

javascript - js 呼び出しの問題、非常に単純なコード、出力結果をどう解釈するか?

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

リーリー

</script>

実行結果:
0
2

phpcn_u1582phpcn_u15822696日前718

全員に返信(6)返信します

  • 迷茫

    迷茫2017-06-26 10:52:10

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

    返事
    0
  • typecho

    typecho2017-06-26 10:52:10

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

    返事
    0
  • 代言

    代言2017-06-26 10:52:10

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-06-26 10:52:10

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

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:52:10

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-26 10:52:10

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

    返事
    0
  • キャンセル返事