在nodejs中使用匿名函数

时间:2015-04-07 13:02:53

标签: javascript node.js

编写nodejs模块时是否可以使用匿名函数。我知道我们使用匿名函数来限制用于特定模块的变量/函数的范围。但是,在nodejs中,我们使用modules.exports在模块外部创建一个函数或变量,因此不应该不需要匿名函数吗?

我之所以这么说是因为流行的节点模块(如async.js)广泛使用匿名函数。

匿名函数示例

1)test_module.js

(function(){

var test_module = {}; 
var a = "Hello";
var b = "World";

test_module.hello_world = function(){

    console.log(a + " " + b);

};

module.exports = test_module;


}());

2)test.js

var test_module = require("./test_module");

test_module.hello_world();


try {   
    console.log("var a is " + a + "in this scope");
}
catch (err){

    console.log(err);
}

try {   
    console.log("var a is " + b + "in this scope");
}
catch (err){

    console.log(err);
}

输出:

Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]

没有匿名功能的示例

1)test_module2.js

var test_module = {}; 
var a = "Hello";
var b = "World";

test_module.hello_world = function(){

    console.log(a + " " + b);

};

module.exports = test_module;

2)test2.js

var test_module = require("./test_module2");

test_module.hello_world();


try {   
    console.log("var a is " + a + "in this scope");
}
catch (err){

    console.log(err);
}

try {   
    console.log("var a is " + b + "in this scope");
}
catch (err){

    console.log(err);
}

输出:

Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]

2 个答案:

答案 0 :(得分:8)

您绝对不需要匿名功能

Node保证您拥有一个干净的名称空间"使用每个文件

唯一的东西"可见"来自每个文件/模块的内容是明确使用module.exports

导出的内容

虽然我仍会做一些更改,但您的test_module2.js更受欢迎。最值得注意的是,您不必将myModule定义为文件中的对象。您可以将该文件视为模块。

<强> test_module3.js

var a = "Hello";
var b = "World";

function helloWorld() {
  console.log(a, b);
}

exports.helloWorld = helloWorld;

答案 1 :(得分:-2)

根据我使用nodejs开发Web应用程序的经验,绝对不需要导出匿名函数!