函数作用域:定义一个function,在函数中定义的变量只能在函数内被访问,出函数就访问不了
类比模块作用域:在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制----------------------减少了全局变量污染的问题
模块中定义的变量和方法在调用中没有访问访问权限
- console.log('这是自定义的模块1 检验模块作用域问题');
- const username='张三';//模块中的全局变量
- function say(){
- console.log('大家好,我是'+username)
- }
- const f1=require('./test_md');//加载自定义模块---会加载模块的所有内容
-
- console.log(f1);//使用f1接收模块 f1默认是空对象

如何向外共享模块作用域中的成员:
里面的信息如下:
- console.log('这是自定义的模块1 检验模块作用域问题');
- const username='张三';//模块中的全局变量
- function say(){
- console.log('大家好,我是'+username)
- }
- console.log(module);

这是自定义的模块1 检验模块作用域问题
Module {
id: '.',
path: 'E:\\nodejs实验\\js',
exports: {},
filename: 'E:\\nodejs实验\\js\\test_md.js',
loaded: false,
children: [],
paths: [
'E:\\nodejs实验\\js\\node_modules',
'E:\\nodejs实验\\node_modules',
'E:\\node_modules'
]
}
所以实际上我们使用require导入的模块,所使用的变量是原来模块的module.exports指向的那个对象

-
- module.exports.username='张三';//对外提供变量
- module.exports.say=function(){
- console.log('大家好,我是'+username)
- };//对外提供方法
暴露模块的私有成员:
使用module.exports.对外的接口=模块内的变量
使用module.exports.对外的接口函数=模块内的函数
module.exports.username=username;
-
- const username='李四';
- function say(){
- console.log('大家好,我是'+username)
- }
- module.exports.a=username;
- module.exports.say=say;

使用require()方法导入模块的注意点:永远以module.exports指向的对象为主(进行了重新的指向)
-
- const age='李四';
- module.exports.age=age;
- module.exports.username='张三';//对外提供变量
- module.exports.say=function(){
- console.log('大家好,我是'+username)
- };//对外提供方法
-
- //让 module.exports指向全新对象
-
- module.exports={
- nickname:'小白',
- sayhi(){
- console.log('hi');
- }
- }
