javascript - 関数のスロットリングに関して、タイマー内の fn.appplay() が奇妙に感じますか?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-14 10:52:57
0
2
729

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

リーリー

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

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

リーリー

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

女神的闺蜜爱上我
女神的闺蜜爱上我

全員に返信(2)
代言

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

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

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

つまり、

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

によって実行されます。
いいねを押す +0
某草草

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

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