在定义foo之前放置“module.exports = foo”是如何工作的
How does putting 'module.exports = foo' work before foo is defined?
我不会说我非常精通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都是已知的。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 在定义foo之前放置“module.exports = foo”是如何工作的
- 如何使用javascript?_中的.protype(?)使foo().bake()与foo.back()一样工作
- 在JavaScript中的类中,push和concat的工作方式有何不同