如果我错了,函数require()
以复制方式导入.js
文件,在当前文档中通过它,那么如果var name
都位于两个模块中,那么第二个模块会覆盖第一个模块吗?
以及如何仅定义文件作用域变量。
请注意,我希望在.js
文件中的任何函数之外定义变量,而不是在global scope
中定义变量。
什么是解决方案,使用关键字var
是否影响变量范围,在javascript
中定义function
以外的范围,module
对象对于定义一个文件中的私有变量有用吗?
module1.js
var name = 'i am module 1'
foo = () => console.log(name)
module.exports = foo
模2.js
var name = 'i am module 2'
foo = () => console.log(name)
module.exports = foo
main.js
const module1 = require('./module1')
const module2 = require('./module2')
module1() // "i am module 1" or "i am module 2"?
module2() // "i am module 2"
发布于 2017-12-08 04:13:50
在javascript中,当您直接将.js
文件加载到'.html‘文件中时,在函数之外声明的变量将在全局范围上注册。为了防止这种情况,人们开始使用IIFE
函数并将单个文件包装在IIFE
中。但是在现代的Javascript
中,您可以像我们在Nodejs
和模块加载器中使用的那样使用modules
来加载这些文件。现在,现代浏览器支持ECMAScript modules
,您可以直接使用它们。
使用模块的主要好处是不必使用IIFE
函数来防止在全局范围上注册的变量。现在,该文件中声明的每个变量都是该文件的私有变量,除非您导出它。
例如: module1.js
var name = 'my name';
function getName(){
return name;
}
module.exports = {
getName
}
在上面的例子中,name
对这个文件是私有的,只有你不能在另一个文件中使用它,除非你导出它。
https://stackoverflow.com/questions/47707509
复制相似问题