从 ES5 开始我们可以使用Object.freeze()
锁定对象。
但是,如果你在草率模式下运行 JS,任何写入属性的操作都会静默失败,除非你激活了严格模式。
但是你需要在哪里设置呢?我使用模块系统(node.js/amd),因此涉及到一堆文件/范围:
- 最初创建对象的范围。
- 在对象上调用 Object.freeze() 的范围。
- 尝试更改对象属性的范围。
- 全球范围
- ???
其中哪一个必须具有(继承)“使用严格”指令来触发错误?
从 ES5 开始我们可以使用Object.freeze()
锁定对象。
但是,如果你在草率模式下运行 JS,任何写入属性的操作都会静默失败,除非你激活了严格模式。
但是你需要在哪里设置呢?我使用模块系统(node.js/amd),因此涉及到一堆文件/范围:
其中哪一个必须具有(继承)“使用严格”指令来触发错误?
最初创建对象的范围。
不,那没关系。
在对象上调用 Object.freeze() 的范围。
这仅与何时freeze
抛出有关。
尝试更改对象属性的范围。
是的。[[Put]]
当评估的引用是严格的并且引用由属性访问器构造时会抛出,如下所示:
7. 如果正在评估的语法产生式包含在严格模式代码中,则令 strict 为真,否则令 strict 为假。
8. 返回一个Reference类型的值,其基值为baseValue,其引用名称为propertyNameString,其严格模式标志为strict。
全球范围
不可以。您不能使“全局范围”严格。严格性是程序代码的一个属性,其最高级别的单元是“程序代码” - 在您的情况下是模块文件。