從字面理解,freeze是冷凍,凍結的意思(像賬戶凍結)。
當用const申明常量時,基礎數據類型申明后是不可以被修改的,但是申明數組和對象時,申明的變量只是指向了該引用數據類型的地址,所以只是地址不允許被修改,但是內容可以被修改,這個時候就可以用到Object.freeze()函數了
給用Object.freeze()函數包裹的對象添加屬性時,打印出來的結果是沒有添加成功的,那么對已有的屬性進行修改,能否實現呢


打印出來結果,並沒有修改成功,這也就是Object.freeze()函數的作用,可以凍結數據,內容不允許被拓展和修改。
那么在Object.freeze()函數之前,是怎么實現引用數據類型的凍結功能的呢,根據Object.freeze()的這兩個功能,我們可以手動封裝一個Object.freeze()
可以看到用Object.defineProperty()函數對對象的屬性添加了只讀的描述后,該屬性也是不允許被修改的,但是obj還是可以添加屬性的,那么我們在用Object.seal()函數將obj包裹一下,就可以實現不允許添加屬性的功能了


也就是說,我們可以把引用數據類型同時用Object.defineProperty()和Object.seal()函數封裝包裹起來,就可以實現Object.freeze()函數的效果了

效果也是一樣的,這就是Object.freeze()函數所實現的功能了。