我不会声称我非常精通 Node,甚至是 Javascript,但我已经看到了以下表单的几个模块
module.exports = foo;
function foo() {
...
}
现在,在这种情况下,我可能会看到这个工作,但是当该模块返回一个已执行的函数时,我真的很困惑。
module.exports = bar();
function bar() {
...
}
这是什么巫术?
我不会声称我非常精通 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 都是已知的。