哪位知道es6中,关于类外变量的生命周期文档解释?

itwriter 发布于 2017/03/06 19:30
阅读 128
收藏 0

我不知道那叫什么,所以擅自称作“类外变量”。还是直接上代码吧。

类Test.js定义:

let a = "origin";

class Test {
    setA(string){
        a = string;
    }
    getA(){
        return a;
    }
}
export default Test;

调用:

 let test1 = new Test();
 console.log("originA",test1.getA());//originA origin
 test1.setA("A modified")
 let test2 = new Test();
 console.log(test2.getA());//A modified

“类外变量”在这里可以用作静态变量,一个实例的改动可以影响到所有实例。

这是我调bug的时候,发现自己之前的理解有误。但关于这种用法,没有找到什么文章可以解释,暂时也只能当作“类的静态变量”来理解。

有没有哪位dalao可以帮忙解释下?最好能附上官方解释。

谢谢——

加载中
0
itwriter
itwriter

ok。我找到官方解释了。这东西叫模块变量。模块变量存储于模块本身,而模块是单例。所以,之前我把它理解为后端的概念——“类的静态变量”,也没什么太大问题。

  • Each module is a piece of code that is executed once it is loaded.
  • In that code, there may be declarations (variable declarations, function declarations, etc.).
    • By default, these declarations stay local to the module.
    • You can mark some of them as exports, then other modules can import them.
  • ......
  • Modules are singletons. Even if a module is imported multiple times, only a single “instance” of it exists.
0
Narky
Narky

这不就是全局变量么,有什么好纠结的

Narky
Narky
回复 @itwriter : 不考虑babel的话,确实let不存在变量提升,作用域在模块级
itwriter
itwriter
嗯,顺带说句。es6中是不存在变量提升的(hoist)。外部要使用模块变量,要么用模块方法,要么模块中进行export。
Narky
Narky
回复 @itwriter : 就按你说的,是模块的全局变量吧
itwriter
itwriter
在我这个例子中,由于我没有把Test文件的a变量进行export,所以外部是不能直接使用的。这算不上全局变量。
itwriter
itwriter
刚查到的资料这应该叫模块变量。理解为模块中的“全局变量”也没什么问题。
下一页
返回顶部
顶部