検索

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

javascript - 関数のスロットリングに関して、タイマー内の fn.appplay() が奇妙に感じますか?

コードは複雑ではなく、ロジックは非常に単純です。機能の調整です。コードを直接記述します。

リーリー

理論的には、ブラウザのウィンドウ サイズを変更し続けると (つまり、間隔が 1 秒未満である必要があります)、2 回目以降 doSomthing は実行されなくなります。常に cleraTimeout を実行しているため、実際の実行結果は console.log('count 'th execution) です。実際には出力されませんが、ブラウザ ウィンドウの変更を停止すると、確認したところ、出力された count1 ではなく、非常に大きな数であることがわかりました。

これは、このコードで次のことを示しています:

リーリー

setTimeout()の匿名関数は実行されず、匿名関数内のfn.apply()が実行されるのですが、原理を教えてください。それとも私のコード自体に何か問題があるのでしょうか?

女神的闺蜜爱上我女神的闺蜜爱上我2809日前757

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

  • 代言

    代言2017-06-14 10:54:57

    にあるものに加えて、setTimeoutには リーリー

    ブラウザのサイズを変更する場合、else のこの

    はしきい値ミリ秒ごとに実行されます fn.apply

    つまり、

    は確かに 1 回だけ実行され、残りの回数は else setTimeout确实只执行了一次,其余的次数是else里的fn.apply

    によって実行されます。

    返事
    0
  • 某草草

    某草草2017-06-14 10:54:57

    1 つの サイズ変更 操作は複数の onresize をトリガーします。1 回目は else の内容をトリガーし、もう 1 回は setTimeout の前に clearTimeout() を記述するため、最後の setTimeout の内容が実行されます。したがって、サイズを 1 回変更すると doSomthing が 2 回トリガーされ、出力されるカウントは少なくとも 2 異なります。各サイズ変更の操作イベントが 250 ミリ秒より大きく 1 秒未満の場合、カウント値は大きくなります。

    返事
    0
  • キャンセル返事