NodeJS:为什么要跳过函数?

时间:2017-06-08 19:23:40

标签: javascript node.js debugging execution

我是nodeJs的新手,并试图理解为什么在这个文件中 - app.js - 函数main()永远不会被执行。

如果我在函数之前添加了一个console.log语句,它会被执行,但函数内部没有任何内容被执行。

我已经使用过调试器,果然,这个函数被完全跳过了。

为什么会这样?是否有一些我忽略的节点组件?

'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...
}

3 个答案:

答案 0 :(得分:1)

您已在模块中定义main但未致电main()。如果这是您的所有代码,则需要在代码末尾添加main()来执行它。

答案 1 :(得分:0)

您永远调用 main函数。

将函数视为一段外包的代码,并给出一个名称。只要你不以名字命名,就什么都不会发生。

因此,您需要在代码中的某处添加以下行:

main();

然后它会起作用。 (请注意,在声明main功能后,您应该执行此操作。)

console.log会自动执行,因为它不是函数中,而是已经在顶层。声明函数也是如此。这就是Node.js 创建这个函数的原因,但是你并没有告诉它实际上用它来做什么。

实际上,由于JavaScript处理函数语句的方式,在声明它之前调用main也会起作用,但是我称之为更好的方式不这样做。使用module.exports也是如此,这也可以这样工作,但如果你在创建函数之后做了它,我会称它为更好的样式。

因此,简而言之,您的代码应如下所示:

'use strict';

const sendEmail = require('./send-email');

console.log("This gets executed");

function main()
{
  // ...
}

main();

module.exports = main;

这将为您运行main函数,并将其导出(如果您想从另一个文件运行相同的函数,这将非常有用)。

答案 2 :(得分:-3)

const sendEmail = require('./send-email');

...加载模块并将exports的值分配给sendEmail

确实全部

exports的值是一个函数。如果你想调用那个函数,那么你必须......调用它。

sendEmail();