节点模块 - 导出变量与导出引用它的函数?

Dav*_*EGP 7 javascript module node.js

最容易用代码解释:

##### module.js
var count, incCount, setCount, showCount;
count = 0; 

showCount = function() {
 return console.log(count);
};
incCount = function() {
  return count++;
};
setCount = function(c) {
  return count = c;
 };

exports.showCount = showCount;
exports.incCount = incCount;
exports.setCount = setCount; 
exports.count = count; // let's also export the count variable itself

#### test.js
var m;
m = require("./module.js");
m.setCount(10);
m.showCount(); // outputs 10
m.incCount();  
m.showCount(); // outputs 11
console.log(m.count); // outputs 0
Run Code Online (Sandbox Code Playgroud)

导出的函数按预期工作.但我不清楚为什么m.count也不是11.

Ray*_*nos 14

exports.count = count

您将count对象上的属性设置为exportscount.即0.

一切都是通过价值而不是通过参考传递.

如果你要定义count为这样的getter:

Object.defineProperty(exports, "count", {
  get: function() { return count; }
});
Run Code Online (Sandbox Code Playgroud)

然后exports.count总是返回当前值,count因此是11

  • 并非一切都是超值的!函数和对象始终通过引用传递. (2认同)
  • @zetlen没有他们通过价值传递.它们传递的值是对象的引用.通过引用传递是指针.我们没有指针 (2认同)