之前写过一篇博文对nodejs全局变量做了一些验证,本篇博文将继续探讨这个话题。

建议先看下前篇博文:

​https://blog.51cto.com/livestreaming/5258039​

好了,我们开始今天的测试。

写一个模块,命名为m.js,代码如下:

let myname = "Jacky";
let name = {
myname:"Jacky"
}
let arr = ["Jacky"];

function set(new_name){
myname = new_name;
name.myname = new_name;
arr[0] = new_name
}

function get(){
return myname;
}

module.exports = { name,myname,arr,set,get};

写主程序app.js,把上述模块引用进来:

const m = require('./m');
const m2 = require('./m');

console.log(m.myname);
console.log(m.name);
console.log(m.arr);
console.log(m.get());
m.set("John");
console.log("----------");
console.log(m2.myname);
console.log(m2.name);
console.log(m2.arr);
console.log(m2.get());

可以看出,主要目的是验证模块中的基本变量、对象变量被引用后是否具有全局效应。

输出结果如下:

Jacky
{ myname: 'Jacky' }
[ 'Jacky' ]
Jacky
----------
Jacky //可见引用的副本并没有改变
{ myname: 'John' }
[ 'John' ]
John

可见,对于基本变量,作为属性导出,引用时是作为一个副本使用的,因此不能作为全局变量使用。

要想作为全局变量使用:

1)使用对象或数组,改变对象或数组内的属性,这样在任何引用的地方都会感知到内容的变化,起到全局共享的作用

2)通过模块接口方法赋值和取值,也具有全局效果。