2014-03-30 33 views
0

由於ES5我們可以使用Object.freeze()鎖定對象。必須設置「使用嚴格」來觸發凍結對象的嚴格模式錯誤?

但是,如果您在sloppy-mode中運行JS,則任何寫入屬性的操作都將無提示地失敗,除非激活strict-mode。

但是你需要設置這個?我使用了一個模塊系統(node.js/amd),因此涉及到一堆文件/示波器:

  1. 最初創建對象的範圍。
  2. Object.freeze()在對象上被調用的作用域。
  3. 嘗試更改對象屬性的範圍。
  4. 全球範圍
  5. ???

哪一個必須(繼承)'use strict'指令來觸發錯誤?

+2

我會說3.我很容易嘗試。 –

+0

^^^他說了什麼 - > http://jsfiddle.net/adeneo/7vfb4/ – adeneo

回答

2

最初創建對象的範圍。

不,那沒關係。

Object.freeze()在對象上被調用的範圍。

這隻在freeze會丟失時纔有意義。

嘗試改變對象屬性的範圍。

是的。 [[Put]]確實當評價基準是嚴格拋出,並且參考由property accessors構造如下:

7.如果正被評估包含在嚴格模式代碼句法生產,讓嚴格是真實的,否則令嚴格是虛假的。

8.返回基本值爲baseValue且引用名稱爲propertyNameString且嚴格模式標誌嚴格的Reference類型的值。

全球範圍

號你不能讓 「全球範圍內」 嚴格。嚴格性是程序代碼的一個屬性,最高級別的單位是「程序代碼」 - 在你的情況下是模塊文件。