之前写过一篇博文对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)通过模块接口方法赋值和取值,也具有全局效果。
标签:Jacky,arr,console,name,nodejs,myname,之二,全局变量,log From: https://blog.51cto.com/livestreaming/6129740