在定义foo之前放置“module.exports = foo”是如何工作的

How does putting 'module.exports = foo' work before foo is defined?

本文关键字:foo 何工作 工作 exports 定义 module      更新时间:2023-09-26

我不会说我非常精通Node,甚至Javascript,但我见过这个形式的几个模块。

module.exports = foo;
function foo() {
  ...
}
现在,我

可以看到这在这种情况下可能有效,但是当该模块返回一个被执行的函数时,我真的很困惑。

module.exports = bar();
function bar() {
  ...
}

这是什么巫术?

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

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

var a = x;
function x( ) { }

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