es6模块中的变量范围在哪里?

时间:2016-12-15 07:11:31

标签: javascript es6-modules

我有3个班级名A.js B.jsUtil.js

Util.js:

只需一个静态函数来获取数据并存储它,然后它不需要每次都发出请求。

import $ from 'jquery';
let store={};
class Util  {
    static storeGet(url,cb){
        //console.log(store);
        if(store[url]){
            cb(store[url])
        }else{
            $.get(url, (data) => {
                store[url]=data;
                cb(data);
            });
        }
    }   
}
export default Util;

我的AB看起来像那样

    ....
    import Util from './util';
    class App extends React.Component {
      constructor(props) {
        super(props);
        this.state = {stories: []};
      }

      componentDidMount() {
            Util.storeGet(Api.getList(), (result) => {
                const data = result;
                if (data) {
                   this.setState((prevState) => ({
                        stories: data.stories
                    }));
                }
            });
        }

      render() {
   ...

现在我可以从AB

导入此类

并且AB都可以正常工作,并且似乎共享store变量。

但我们知道AB无法直接访问store

所以我想知道store变量范围究竟在哪里?

为什么不能直接访问store,而是通过函数storeGet ??

1 个答案:

答案 0 :(得分:0)

在ES6模块内部声明的所有变量对该模块都是私有的。哪个好如果您确实想将store变量直接提供给其他代码使用(在这种情况下可能不是一个好主意),则可以这样更改代码:

export let store = {};

然后像这样使用它:

import { store } from './util';