首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript文件或模块作用域仅适用于变量

Javascript文件或模块作用域仅适用于变量
EN

Stack Overflow用户
提问于 2017-12-08 04:02:40
回答 1查看 1.7K关注 0票数 0

如果我错了,函数require()以复制方式导入.js文件,在当前文档中通过它,那么如果var name都位于两个模块中,那么第二个模块会覆盖第一个模块吗?

以及如何仅定义文件作用域变量

请注意,我希望在.js文件中的任何函数之外定义变量,而不是在global scope中定义变量。

什么是解决方案,使用关键字var是否影响变量范围,在javascript中定义function以外的范围,module对象对于定义一个文件中的私有变量有用吗?

module1.js

代码语言:javascript
运行
复制
var name = 'i am module 1' 

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

module.exports = foo

模2.js

代码语言:javascript
运行
复制
var name = 'i am module 2' 

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

module.exports = foo

main.js

代码语言:javascript
运行
复制
const module1 = require('./module1')
const module2 = require('./module2')

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

回答 1

Stack Overflow用户

发布于 2017-12-08 04:13:50

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

使用模块的主要好处是不必使用IIFE函数来防止在全局范围上注册的变量。现在,该文件中声明的每个变量都是该文件的私有变量,除非您导出它。

例如: module1.js

代码语言:javascript
运行
复制
var name = 'my name';

function getName(){
    return name;
}

module.exports  = {
    getName
}

在上面的例子中,name对这个文件是私有的,只有你不能在另一个文件中使用它,除非你导出它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47707509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档