哪里必须"使用严格"设置为在冻结对象上触发严格模式错误?

时间:2014-03-30 19:29:22

标签: javascript strict-mode

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

但是如果你在sloppy模式下运行JS,除非你激活严格模式,否则任何对属性的写入都会无声地失败。

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

  1. 最初创建对象的范围。
  2. 在对象上调用Object.freeze()的范围。
  3. 尝试更改对象属性的范围。
  4. 全球范围
  5. ???
  6. 其中哪一个必须(继承)a'使用严格的'指令触发错误?

1 个答案:

答案 0 :(得分:2)

  

最初创建对象的范围。

没有。那没关系。

  

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

仅在freeze投掷时才有意义。

  

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

是。当评估的引用是严格的时,[[Put]]会抛出,引用由property accessors构造,如下所示:

  

7。如果正在评估的语法生成包含在严格模式代码中,则let strict为true,否则let strict为false。

     

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

  

全球范围

没有。你不能严格要求“全球范围”。严格性是程序代码的属性,其中最高级别的单元是“程序代码” - 在您的情况下是模块文件。