放置这两个局部变量有什么区别

时间:2017-03-09 17:03:08

标签: reactjs ecmascript-6

这两种声明局部变量的方法有什么区别吗?第二种方式真的会走向全球吗?我在应用程序中有一些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(){
        ...
    }
    ...
}

2 个答案:

答案 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设计模式(模块模式等)