在定义foo之前如何使'module.exports = foo'工作?

时间:2013-10-31 02:11:07

标签: javascript node.js

我不会声称我非常精通Node,甚至是Javascript,但我已经看过几个模块

module.exports = foo;

function foo() {
  ...
}

现在,在这种情况下,我可以看到这个工作或许,但当模块返回一个被执行的函数时,我真的很困惑。

module.exports = bar();

function bar() {
  ...
}

这巫术是什么?

1 个答案:

答案 0 :(得分:5)

在解析时定义函数,在运行时分配赋值。有关详情,请参阅此文http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

简而言之,编译器进行2次传递。使用以下代码:

var a = x;
function x( ) { }

在第一遍中,var a和function x被声明并在符号表(或其他形式,取决于解释器)中可用,之后编译器进行第二次传递,执行函数x的赋值以及var a。在这个阶段,在任何时候(但仅限于语言规则),函数x是已知的。