这两种声明局部变量的方法有什么区别吗?第二种方式真的会走向全球吗?我在应用程序中有一些const componentName = 'xxxxxx'
的不同组件,看起来它们没有碰撞。
file1.js
export default class MyComponent extends React.Component {
constructor(){
...
this.options = ['a', 'b', 'c'];
this.componentName = 'MyComponent';
}
...
}
file2.js
const options = ['a', 'b', 'c'];
const componentName = 'MyComponent';
export default class MyComponent extends React.Component {
constructor(){
...
}
...
}
答案 0 :(得分:0)
根据jsp:include
的{{3}}:
常量是块范围的,非常类似于使用的变量 的let语句。
然后参考const
的{{3}}:
在程序和函数的顶层,让我们不像var那样 在全局对象上创建一个属性。
正如您所指出的,即使在顶层,let
也不会污染全局对象(const
)。
答案 1 :(得分:0)
看看这个:http://exploringjs.com/es6/ch_modules.html#sec_modules-in-javascript
来自链接:
16.2 JavaScript中的模块
即使JavaScript从未有过内置模块,社区也有 融合在一个简单的模块风格上,受到支持 ES5及更早版本的图书馆。这种风格也被ES6采用:
每个模块都是一段加载后执行的代码。在 那段代码,可能有声明(变量声明,函数 声明等)。默认情况下,这些声明保持在本地 模块。您可以将其中一些标记为导出,然后其他模块可以 导入它们。模块可以从其他模块导入内容。它指的是 通过模块说明符到这些模块,字符串是: 相对路径('../model/user'):解释这些路径 相对于导入模块的位置。文件扩展名 .js通常可以省略。绝对路径('/ lib / js / helpers'):指向 直接到要导入的模块的文件。名称('util'): 必须配置名称引用的模块。模块是 单身。即使模块多次导入,也只能导入一个模块 它的“实例”存在。
这种模块方法避免了全局变量< - ,
唯一全局的是模块说明符。 < -
在示例中1.您将它们作为Class的一部分,因此它们在Class的实例中可用(虽然它们不是全局的),它们是实例的一部分,因为“this”将引用Class的实例,而不是全局的“window”对象。 (因此,在示例1中,它们不是局部变量)
在示例2中,你的consts将保留在你声明的模块中的本地,无论你做什么
export const foo = 'bar'; (still not global, but can be imported within other modules)
差别就是这样。
另一个好读:https://joshbedo.github.io/JS-Design-Patterns/ Javascript设计模式(模块模式等)