Javascript NodeJS:模块共享状态的值
我正在阅读模块的教程,在学习模块的共享状态时,我遇到了一些疑问: 我编写了以下代码: Sparsh.jsJavascript NodeJS:模块共享状态的值,javascript,node.js,Javascript,Node.js,我正在阅读模块的教程,在学习模块的共享状态时,我遇到了一些疑问: 我编写了以下代码: Sparsh.js var popcorn = require('./popcorn'); popcorn.favPopCorn = 'cheese'; console.log(popcorn.favPopCorn); Ravi.js var popcorn = require('./popcorn'); console.log(popcorn.favPopCorn); app.js require('./
var popcorn = require('./popcorn');
popcorn.favPopCorn = 'cheese';
console.log(popcorn.favPopCorn);
Ravi.js
var popcorn = require('./popcorn');
console.log(popcorn.favPopCorn);
app.js
require('./Ravi');
require('./Sparsh');
require('./Ravi');
爆米花
module.exports = {
printRate : function() {
console.log('popcorn rate');
},
favPopCorn : ''
};
输出
(空白)
奶酪
(空白)
根据输出,第一个空格相当大,因为我们没有给favPopCorn分配任何值。但是在我在Sparsh.js中将值分配给favPopCorn之后,它应该打印“cheese”,而我们再次使用require(“.\Ravi.js”);因为这是一个共享状态
请帮助Ravi.js
也是共享的(好吧,“缓存”是一个更好的词),所以它只加载一次(第一次)。第二次,节点知道它已经被加载,并且第二次不加载(/execute)它(它不输出空白,它根本不输出)
常见的解决方法是导出函数:
// Ravi.js
var popcorn = require('./popcorn');
module.exports = function() {
console.log(popcorn.favPopCorn);
}
// Sparsh.js
var popcorn = require('./popcorn');
module.exports = function() {
popcorn.favPopCorn = 'cheese';
console.log(popcorn.favPopCorn);
}
// app.js
require('./Ravi')();
require('./Sparsh')();
require('./Ravi')();
Ravi.js
也是共享的(好吧,“cached”是一个更好的词),所以它只加载一次(第一次)。第二次,节点知道它已经被加载,并且第二次不加载(/execute)它(它不输出空白,它根本不输出)
常见的解决方法是导出函数:
// Ravi.js
var popcorn = require('./popcorn');
module.exports = function() {
console.log(popcorn.favPopCorn);
}
// Sparsh.js
var popcorn = require('./popcorn');
module.exports = function() {
popcorn.favPopCorn = 'cheese';
console.log(popcorn.favPopCorn);
}
// app.js
require('./Ravi')();
require('./Sparsh')();
require('./Ravi')();
这种思考的一种干净模式是在共享模块中创建一个具有
new
的对象:
//popcorn.js
function popcorn(){
this.printRate = function() {
console.log('popcorn rate');
}
this.favPopCorn = ""
}
module.exports = new popcorn()
现在,当您在其他模块中获取并设置
favPopCorn
属性时,您将操作一个单例。这种思考的一种干净模式是在共享模块中创建一个具有new
的对象:
//popcorn.js
function popcorn(){
this.printRate = function() {
console.log('popcorn rate');
}
this.favPopCorn = ""
}
module.exports = new popcorn()
现在,当您在其他模块中获取并设置
favPopCorn
属性时,您将操作一个单例。每次您需要ravi.js时,variable popcorn都会在ravi.js中重新初始化,因此根据变量范围,输出是正确的,它是一个共享状态,因此当我们在Sparsh.js中更改它时,favPopCorn的值应该反映在Ravi.js中。但是我再次检查了这一点,我们只能使用“require('anymodule')”一次,因此添加require('./Ravi');没有多大意义您必须从变量声明中删除“var”,以便通过将其放入全局来共享变量。每次您需要ravi.js时,variable popcorn都会在ravi.js中重新初始化,因此根据变量范围,输出是正确的。根据教程,它是一个共享状态,因此当我们在Sparsh.js中更改它时,favPopCorn的值应该反映在Ravi.js中。但是我再次检查了这一点,我们只能使用“require('anymodule')”一次,因此添加require('./Ravi');没有多大意义您必须从变量声明中删除“var”才能通过将其放入全局来共享。是的,您是对的,但是您能告诉我应该如何反映修改后的值吗。是的,您是对的,但是您能告诉我应该如何反映修改后的值吗。