一、global
global是node环境下的全局变量,可以在任意的代码块内使用,比较常用的变量有__dirname,__filename,exports,module,equire();
使用方法:
赋值:global.aaa =5;(任意模块内都可使用)
获取:global.aaa (任意模块内都可使用)
优点:使用简单。
缺点:相当于给全局多挂载属性,容易造成互相覆盖等问题。
二、模块导出
新建一个test文件,并导出。
module.exports = {
test1:"测试1",
test2:"测试2"
}
使用方法:
获取:
let globafn = require('./Globa');(需要在要用得模块上方引用)
globafn.test1;
globafn.test2;
赋值:
let globafn = require('./Globa');(需要在要用得模块上方引用)
globafn.test1 = "修改1";
globafn.test2 = "修改2";
此时如果有第三个模块使用 :
打印的值为:
globafn.test1 -->修改1
globafn.test2 -->修改2
注意:不要使用解构的模式,否则会导致每个页面上的属性都是初始值。一定要整个模块引用。
正确实例:
let globafn = require('./Globa');
globafn.xxxxx;
错误实例:
let {xxxxx}= require('./Globa');
三、利用闭包
闭包:利用函数内部的变量被外部调用导致整个环境的上下位未释放,进而可以访问当前环境的变量。
新建一个test文件,并利用立即执行函数直接执行返回函数,形成闭包。
module.exports = (function () {
//此处打印只执一次,node 环境加载模块时会有缓存功能,不会重复缓存
console.log("调用了几次",Math.random())
let obj = {
test :'测试1',
test2 :'测试2',
}
return function (){
return obj
}
})()
使用方法:
获取:
let globafn = require('./Globa');(需要在要用得模块上方引用)
在路由或者其函数内部使用
let globa = globafn();
globa.obj ;
赋值:
let globafn = require('./Globa');(需要在要用得模块上方引用)
let globa = globafn();
globafn.test1 = "修改1";
globafn.test2 = "修改2";
此时如果有第三个模块使用 :
打印的值为:
globafn.test1 -->修改1
globafn.test2 -->修改2