javascript - 你如何编写一个在解析完 js 文件的其余部分后才运行的函数

标签 javascript

假设我在一个脚本之上有一些函数,当给定一个散列映射函数名称 {string} 到它下面定义的函数时,所以在代码中:

collect({"f1" : f1, "f2" : f2 })

问题是如果 collect 位于页面顶部,那么 f1、f2、.. 将指向未定义,因为这些函数尚未定义。简单的解决方案是将 collect 放在页面底部。但是,如果我固执地需要它位于顶部,我该如何延迟执行 collect 直到所有其他函数都被解析?

注意,其余函数定义在表单中:

var name; 
name = function(){ .. }

奖励问题:

如果我可以定义 collect ,而不是将 has 映射名称传递给函数,我可以只传递函数列表或字符串列表,并实现相同的效果,会更好。所以在代码中,类似

collect([f1,f2]) 
collect(["f1","f2"])

更新:我想我没有明确说明我的要求。我特别希望延迟函数的执行,直到文件的其余部分被解析。我不希望通过其他一些改变我正在尝试做的事情的语义的黑客来复制这种行为。

最佳答案

您可以延迟 collect 的执行,直到一切运行完毕,例如使用 setTimeout:

function collect(o) { /.../ }

setTimeout(function() { collect({"f": f}); }, 0);

var f = function f() {}

引擎不会执行任何事件回调,包括。超时处理程序,直到当前执行上下文完成(好吧,不完全是,请参阅 7.3 Timers ,特别是步骤 11. + 12.)。这是一个 fiddle有一些人为的延迟,演示这些东西。

关于javascript - 你如何编写一个在解析完 js 文件的其余部分后才运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806105/

相关文章:

javascript - 了解 querySelector 和 querySelectorAll 控制台输出

javascript - 在 NodeJS 中使用类函数作为事件监听器

javascript - 访问json响应的某个key [AngularJS]

javascript - 对复制图像所做的更改也会对原始图像进行更改。(js)

javascript 数学,以 .05 为增量四舍五入到小数点后两位

javascript - fatal error : CALL_AND_RETRY_LAST Allocation failed — process out of memory

javascript - CasperJS 中 casper.echo 和 console.log 的区别

javascript - 如何分割一个字符串然后将它们与另一个字符串匹配

javascript - 将 JavaScript 链接到 HTML 文件

javascript - CodeIgniter - 如何保存下拉所选值并在返回页面时设置它