为什么es6不允许这样做?我知道该消息仅在警报模块中定义,而在基本模块中未定义,但是我(显然是错误的)想像一下,由于警报类可以访问它,因此所有类都应该...有想法吗?

//file component.js
import Base from './base';
const message = "hello";
class Alert extends Base {
    initialize() {
        this.render();
    }
}
export default Alert;




//file base.js
class Base {
    render() {
        alert(message);
    }
}
export default Base;

最佳答案

这不起作用,因为JavaScript具有lexical scope而不是动态范围。

词法作用域意味着变量是否可访问取决于变量在源文本中的位置,而不取决于运行时信息。

简化示例:

function foo() {
  var bar = 42;
  baz();
}

function baz() {
  console.log(bar); // error because bar is not in the scope of baz
}


注意:对于类或ES6来说,这并不是新问题,总是如此。

关于javascript - 具有扩展类和模块的es6变量范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35202865/

10-12 12:27
查看更多