Javascript 文件或模块范围内的变量

标签 javascript node.js module scope

如果我错了,请纠正我,函数 require() 以某种方式导入 .js 文件,并将其复制到当前文档中,因此如果 var name 都在两个模块中,第二个模块会覆盖第一个模块吗?
以及如何定义仅限文件范围的变量

请注意,我想在 .js 文件中的任何函数之外定义变量,而不是在 全局范围 中定义变量

解决方案是什么,使用关键字var是否会影响变量作用域,在javascript<中定义除function之外的作用域module 对象可用于在一个文件中定义私有(private)变量

module1.js

var name = 'i am module 1' 

foo = () => console.log(name)

module.exports = foo

module2.js

var name = 'i am module 2' 

foo = () => console.log(name)

module.exports = foo

ma​​in.js

const module1 = require('./module1')
const module2 = require('./module2')

module1() // "i am module 1" or "i am module 2"?
module2() // "i am module 2"

最佳答案

在 javascript 中,当您直接在“.html”文件中加载 .js 文件时,在函数外部声明的变量将在全局范围内注册。为了防止这种情况,人们开始使用 IIFE 函数并将单个文件包装在 IIFE 中。但在现代 Javascript 中,您可以像我们在 Nodejs 中使用的那样使用模块和模块加载器来加载这些文件。现在现代浏览器支持ECMAScript模块,您可以直接使用它们。

使用模块的主要好处是您不必使用 IIFE 函数来阻止变量在全局范围内注册。现在,该文件中声明的每个变量仅对该文件是私有(private)的,除非您将其导出。

例如: 模块1.js

var name = 'my name';

function getName(){
    return name;
}

module.exports  = {
    getName
}

在上面的示例中,name对此文件是私有(private)的,只是您不能在其他文件中使用它,除非将其导出。

关于Javascript 文件或模块范围内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707509/

相关文章:

javascript - 如果图像未正确加载,如何显示默认图像?

node.js - 在 Visual Studio 代码中使用 typescript 和 webpack 调试 nodejs 项目的正确方法

android - ImageFactory.imageAsResized 返回 null

ruby-on-rails - 将类函数分解为模块是否可以提高 Rails 的性能?

javascript - 从函数参数中获取图像名称

php - Jquery $.post 问题

javascript - 在 docker 容器中安装 yarn 说缺少依赖

node.js - Mongoose 种群(refs)不起作用

python - 如何检查模块是否已安装在 Python 中,如果没有,则在代码中安装它?

php - 如何在javascript中使用soap