假设我在一个脚本之上有一些函数,当给定一个散列映射函数名称 {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/