Node 模块作用域
Posted 乱舞春秋__
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node 模块作用域相关的知识,希望对你有一定的参考价值。
在Node
中,存在着模块作用域的概念,即默认情况下,模块彼此间无法访问对方的成员,只能通过require
方法来进行模块间通信。当然,模块作用域的存在也带来了好处,使得我们可以避免变量命名冲突的情况。
模块作用域的特点:
- 模块是完全封闭的
- 外部访问不到内部
- 内部也访问不到外部
require
方法的特点:
require
方法会默认执行被加载模块中的代码require
方法可以得到被加载模块的接口对象exports
(该对象默认为一个空对象),被加载模块需要手动地将供外部访问的成员挂载到exports
对象上。
注意:require
方法只是加载并执行其他模块,并不会污染其他模块。
默认情况下,模块彼此间无法访问对方的成员,例:
模块1代码:
console.log(a);
console.log(add(10, 20));
模块2代码:
let a = 1;
function add(num1, num2) {
return num1 + num2;
}
运行模块1,结果如下:
可见,默认情况下,模块彼此间无法访问对方的变量
或方法
。
这时,我们可以使用require
方法来解决这一问题,require
方法默认会执行被加载模块中的代码,并得到被加载模块的exports
接口对象(该对象默认为一个空对象
)。
语法格式:
require('文件的路径')
使用require
方法进行模块间通信,例:
模块1代码:
console.log('module1 start');
const obj = require('./module2.js');
console.log(obj);
console.log('module1 end');
模块2代码:
console.log('module2 start');
exports.a = 2;
exports.add = function add(num1, num2) {
return num1 + num2;
};
console.log('module2 end');
执行模块1的代码,结果如下:
模块2需要把供外部访问使用的成员手动的挂载到了exports
接口对象上,模块1使用require
方法加载模块2时,就会得到模块2的exports
接口对象。同时,会默认执行模块2中的代码。
此时,在模块1中可以使用模块2中的成员:
console.log(obj.a);
console.log(obj.add(10, 20));
输出结果:
总结:
Node
中存在模块作用域,模块彼此间无法访问对方的成员。- 使用
require
方法可以实现模块间通信。 require
方法会默认执行被加载模块中的代码。exports
接口对象默认为一个空对象。- 被加载模块需要手动地将供其他模块访问的成员挂载到
exports
接口对象上。
以上是关于Node 模块作用域的主要内容,如果未能解决你的问题,请参考以下文章