Javascript NodeJS:为什么要跳过函数?
我不熟悉nodeJs,正在试图理解为什么在这个文件--app.js--中函数main()从未执行过 如果在函数之前添加console.log语句,则会执行该语句,但函数内部不会执行任何内容 我已经使用了调试器,可以肯定的是,该函数将被完全跳过 为什么会发生这种情况?是否有我忽略的节点组件Javascript NodeJS:为什么要跳过函数?,javascript,node.js,debugging,execution,Javascript,Node.js,Debugging,Execution,我不熟悉nodeJs,正在试图理解为什么在这个文件--app.js--中函数main()从未执行过 如果在函数之前添加console.log语句,则会执行该语句,但函数内部不会执行任何内容 我已经使用了调试器,可以肯定的是,该函数将被完全跳过 为什么会发生这种情况?是否有我忽略的节点组件 'use strict'; const sendEmail = require('./send-email'); module.exports = main; //console.log("This ge
'use strict';
const sendEmail = require('./send-email');
module.exports = main;
//console.log("This gets executed");
//this function never gets executed!
function main()
{
debugger
...some functionality...
}
您已在模块中定义了
main
,但未调用main()
。如果这是您的全部代码,您需要在代码末尾添加main()
以执行它。您从不调用main
函数
将函数视为一段代码,该代码被外包,并给出了一个名称。只要你不直呼它的名字,什么都不会发生
因此,您需要在代码中添加以下行:
main();
那就行了。(请注意,您应该在声明main
函数后执行此操作。)
console.log
会自动执行,因为它不在函数中,但已经在顶层。函数的声明也是如此。这就是Node.js为创建此函数的原因,但您没有告诉它实际使用它
实际上,如果在声明之前调用main
,由于JavaScript处理函数语句的方式,调用main也会起作用,但我认为不这样做更好。使用module.exports时也是如此,这也会以这种方式工作,但是如果在创建函数后使用它,我也会称之为更好的样式
因此,长话短说,您的代码应该如下所示:
'use strict';
const sendEmail = require('./send-email');
console.log("This gets executed");
function main()
{
// ...
}
main();
module.exports = main;
这将为您运行main
函数,并将其导出(如果您希望从另一个文件运行相同的函数,这将非常有用)
…加载模块并将导出
的值分配给发送电子邮件
这就是它所做的一切
exports
的值是一个函数。如果你想调用这个函数,那么你必须…调用它
sendEmail();
如何调用函数?如果app.js
是您的输入脚本,Node.js不会使用定义执行时自动调用的main
函数的模式。从第1行第1个字符开始的整个输入脚本是启动应用程序行为/逻辑的“主”代码。是否有将模块移动到末尾的原因?这只是个人风格。基本上,您可以将其放在文件中的任何位置,但我希望导出始终位于文件的底部。这背后的逻辑是:首先定义所有私有的,然后定义所有公共的,然后导出它们。但正如所说,这只是个人风格。
sendEmail();