1

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

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

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

请注意,其余函数的定义形式为:

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

奖金问题:

如果我可以定义collect这样,而不是传入一个有映射名称到函数,我可以只传入一个函数列表或字符串列表,并达到相同的效果,那就更好了。所以在代码中,类似

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

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

4

2 回答 2

2

您可以延迟执行,collect直到一切运行后,例如使用setTimeout

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

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

var f = function f() {}

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

于 2013-09-14T20:39:49.183 回答
0

我认为是时候了解对象和原型了。function Whatever(){}使用原型创建一个对象Whatever.prototype = { f1: ..., f2: ...}并使函数引用其他函数this

function Whatever() {};
Whatever.prototype = {
  f1: function() {
    // don't care that this function doesn't exist yet,
    // because what an object is built from this prototype,
    // ALL functions will exist at the same time. Handy.
    this.f2("this is a string");
  },
  f2: function(s) {
    console.log(s);
  }
}; 
var what = new Whatever();
what.f2("lol");
what.f1();
于 2013-09-14T20:33:02.530 回答