【发布时间】:2013-03-24 19:44:46
【问题描述】:
我对编译器如何在内部解析此引用感兴趣。假设我们有这段代码:
function makeConsumer(run_priority,run_object) {
var consumer = function(last_run_action) {
if(!!last_run_action) {
// do something
} else {
var next_to_load = run_priority.shift();
next_to_load.consume = consumer;
run_load_script(next_to_load,run_object);
}
};
return consumer;
}
在顶部有一个对consumer 的引用,然后,在函数完成定义之前,另一个对consumer 的引用出现在最后一个else 块中。如果在执行代码时甚至没有分配原始消费者,那么对消费者的引用如何有效?我知道函数将范围推到顶部,但是对于分配给变量的函数表达式也是如此吗?
是否可以创建一个场景,其中函数通过分配给它的变量引用自己,并且该引用尚未有效?当该引用是尚未完成定义的函数的一部分时,javascript 如何使对 consumer 的第二次引用引用该函数?
这是否等同于递归中使用的引用?如果是这样,编译器如何评估它们是否有效?
【问题讨论】:
标签: javascript recursion compiler-construction scope