【发布时间】:2017-01-01 15:10:36
【问题描述】:
我知道这个问题已被问过多次(是的,我做了一些研究),但我找不到适合我需求的解决方案。
到目前为止我做了什么:
我正在构建一个函数来跟踪用户向下滚动页面的百分比并将其很好地显示到某个进度条中。这非常有效,但是当我在 Chrome 上打开开发者控制台并查看 Timeline 选项卡(这以漂亮的图形显示正在运行的内容)时,我意识到我的代码非常“活跃”。它运行了用户向下滚动页面的每个像素,老实说,这相当多。
所以我心想,如何才能改进这一点,我想出了一个解决方案,该解决方案涉及每 {whatever} 毫秒只执行一次函数。如果函数已经在 {whatever} 毫秒内执行,则这涉及设置为 true 或 false 的变量。
我想要完成的事情:
我希望能够设置对外部变量的引用,该变量将作为一个标志来确定函数是否已经执行。
function qeue(fn, interval, status){ // this function name might not be very fitting..
// fn = function to be executed
// interval = function can only run once between the intervals
// status = tricky part..
// This should contain a reference to an external variable that is either true or false
}
如何做到这一点?
旁注
如果这个解释没有帮助,而你仍然没有得到我想要的:
如何将变量的引用传递给函数,以便函数可以根据该变量的值进行操作?
为什么不能选择普通参数 我想在一个函数中实现某种递归 setTimeout 功能,检查另一个函数是否已执行,如果我将其传递给参数,则此参数在此过程中无法更改。
希望大家能帮帮我!
谢谢
感谢您的所有精彩回答。你让我学到了很多东西。我将采用去抖动策略!我标记了 T.J.克劳德是最好的答案,因为它是一个很好的解释,也是第一个。但是再次感谢大家!
【问题讨论】:
-
你可以瀑布式的承诺,这样你就可以在每个进一步的 settimeout 调用中使用最后一个结果。查看此帖子remysharp.com/2015/12/18/promise-waterfall/#comment-3076688933
标签: javascript