js中的import和require模块作用域
文章类型:Javascript
发布者:hp
发布时间:2024-12-02
在JavaScript中,每个模块都有自己的作用域,模块之间的变量是互相隔离的,不会相互干扰。这也是模块化编程的一个主要特点
1:使用import导入模块时,实际上是在模块内部创建了一个指向被导入模块的引用,而不是直接复制模块中的变量,
2:不同的文件中使用import导入相同的模块时,它们实际上是共享了同一个模块实例,所以可以访问和修改同一个模块中的变量
1:require导入模块时,实际上是将导入模块中的变量直接复制到(可以理解为浅拷贝)当前模块的作用域中
2:当不同的文件中使用require导入相同的模块时,它们实际上是拥有各自独立的模块实例,彼此之间不会共享模块中的变量
3:require导入的模块中含有可变状态的对象,那么在不同文件中修改该对象的变量会相互影响
1:require可变状态对象
let config = {
env: 'dev',
port: 3000
}
module.exports = config;
const config = require('./config.js');
// 修改config对象的属性值
config.port = 4000;
console.log(`config.port in main.js: ${config.port}`);
1:使用import代替require:使用import导入模块时,不同文件导入同一个模块实际上是共享了同一个模块实例,可以避免使用require时出现的副作用
2:使用纯函数:纯函数是指输入相同的参数,输出结果也相同,并且不会对外部环境产生任何副作用的函数。
3:使用常量或不可变对象:常量或不可变对象指的是一旦定义后就无法再被修改的值。
4:使用模块的副本:可以通过在模块导出时返回一个副本,而不是直接返回模块内部的对象或变量。