4

与默认语言(ES5 Default)不同,JavaScript 的严格模式(ES5 Strict)提供了使语言完全静态作用域的限制。由于这些违规行为,默认语言不是完全静态范围的:

  • 对未声明变量的赋值动态地创建隐含的全局变量,
  • 语句(对象在 JavaScript中with是动态的,因此 JS 引擎在评估之前无法知道哪些名称是对象的属性,哪些名称绑定到环境),
  • eval调用可以动态添加名称到环境中,
  • 操作员可以从环境中delete动态删除名称(适用于隐含的全局变量,以及通过 eval 调用添加的变量)。

来源:http ://www.youtube.com/watch?v=Kq4FpMe6cRs&t=42m48s

我可以看到完整的静态作用域有助于提高性能,因为 JS 引擎可以在评估之前绑定变量(或至少其中大部分)(到词法环境中的名称)。另外,我想,该程序变得更具可读性并且不太可能引起混淆。

但是,我对完全静态范围的好处的理解并不像我希望的那样完整。

4

0 回答 0