0

从 ES5 开始我们可以使用Object.freeze()锁定对象。

但是,如果你在草率模式下运行 JS,任何写入属性的操作都会静默失败,除非你激活了严格模式。

但是你需要在哪里设置呢?我使用模块系统(node.js/amd),因此涉及到一堆文件/范围:

  1. 最初创建对象的范围。
  2. 在对象上调用 Object.freeze() 的范围。
  3. 尝试更改对象属性的范围。
  4. 全球范围
  5. ???

其中哪一个必须具有(继承)“使用严格”指令来触发错误?

4

1 回答 1

2

最初创建对象的范围。

不,那没关系。

在对象上调用 Object.freeze() 的范围。

这仅与何时freeze抛出有关。

尝试更改对象属性的范围。

是的。[[Put]]当评估的引用是严格的并且引用由属性访问器构造时会抛出,如下所示:

7. 如果正在评估的语法产生式包含在严格模式代码中,则令 strict 为真,否则令 strict 为假。

8. 返回一个Reference类型的值,其基值为baseValue,其引用名称为propertyNameString,其严格模式标志为strict。

全球范围

不可以。您不能使“全局范围”严格。严格性是程序代码的一个属性,其最高级别的单元是“程序代码” - 在您的情况下是模块文件。

于 2014-03-30T19:43:08.020 回答