对于一个js文件,全局变量在文件的所有代码级别都以访问,我们写一个文件 model.js:
// model.js
var v1 = 1;
function set(value){
v1 = value;
}
function get(){
return v1;
}
这里,v1 是一个全局变量,在文件的各个位置都可以访问。
那么,对于nodejs程序,这里的v1是一个什么级别的变量呢?
我们把model.js改造成可包含的模块:
// model.js
var v1 = "Oh";
function set(value){
v1 = value;
}
function get(){
return v1;
}
module.exports = {get,set}
如果有其他文件包含model.js,v1是什么级别的变量呢?
我们再写一个文件: app.js
const m1 = require("./model");
m1.set("Hello!");
let v = m1.get();
console.log(v);
运行app.js:
[root@iZ2zebh6hcw1hmlq0t16egZ node]# node test.js
Hello!
我们发现,model.js中的v1依然是全局变量。
再改造下app.js:
const m1 = require("./model");
const m2 = require("./model");
m1.set("Hello!");
let v = m2.get();
console.log(v);
运行app.js:
[root@iZ2zebh6hcw1hmlq0t16egZ node]# node test.js
Hello!
我们发现,model.js不管被谁包含几次,v1依然是全局变量,而且只有一个实例,并没有随着不同的包含而定义出新的变量。
结论是,js文件中的全局变量,在nodejs程序的整个运行期间都是全局的,而且是超全局的,各个子模块都可以访问。