我正在查看node-etherdream库的代码,在主模块中我看到了这个:
(缩写):
(function(ns) {
/// a bunch of code
})(exports);
我从未见过将exports
传递给这样的匿名函数,也没有在此代码中的任何位置看到module.exports
。然而,此文件与任何其他模块一样reuire
。
有人可以向我解释exports
对此的使用吗?
答案 0 :(得分:1)
导出是可以将变量设置为的特殊对象。 所以在这个例子中,当函数执行时,它传递了这个对象的导出。
如果你想导出一些变量,可以在ns变量(exports)中设置它,就像这样:
(function(ns) {
/// a bunch of code
ns.func1 = function(){}
ns.func2 = function(){}
ns.age = 20
})(exports);
当您需要来自其他文件的文件时,您将可以访问此变量func1,func2和age:
var o = require('file.js')
o.func1();
o.func2();
o.age // => 20
答案 1 :(得分:0)
您可以查看以下Immediately Invoked Function Expression (IIFE)
(发音 iffy
),其中exports
作为参数传递给下面函数的ns
参数。
(function(ns) {
/// a bunch of code
})(exports);
当您查看代码EtherDream
内部时,将使用所需的所有方法创建对象,并最终绑定到ns
参数,其中ns
将作为exports
传递给以下行相当于exports.EtherDream = EtherDream;
(function(ns) {
/// a bunch of code
ns.EtherDream = EtherDream;
})(exports);
如果您仍然不了解IIFE
的工作原理及其参数,可以执行下面的示例iife
摘要。
(function(ns) {
console.log(ns);
})(10); // argument passed as 10 to ns
// This is same as below global scope method
function another(ns) {
console.log(ns);
}
another(10);