2016-10-20 27 views

回答

1

只是为了澄清。这是专门针对Node.js的

创建在节点模块这就像你在类似下面的一个函数进行包装。实际上,这或多或少是节点正在做的事情。

function (exports, require, module, __filename, __dirname) { 

} 

所以,exports变量实际上是对module.exports的引用,像这样,你可以有两个变量指向同一个对象。导出和module.exports引用内存中的同一个点。您必须小心使用导出,因为有一些与JavaScript对象相关的“黑暗”部分,并且存在一些可能会中断的模式。这里有一个例子:

dependency_exports.js

exports = function() { 
    console.log('dependency'); 
} 
// Place console.log to see the contents of the exports and module.exports 
console.log(exports); 
console.log(module.exports); 

app.js

var dependency = require('./dependency_exports'); 
dependency(); 

为什么dependency_exports.js文件中的两个console.logs打印,如果不同的对象他们指着相同的记忆?请记住,它是对module.exports的引用。 当我们指定其他值,以该变量(出口)我们打破创建参考和在存储器中的新的点。 它不会更新module.exports中的引用。

所以,现在,如果我们试图做这样的事情:

dependency(); 

我们会看到一个错误回来,因为这个问题。

相关问题