In brief
Freezing is not automatically recursive.
Useful to know
Object.freeze() disables certain changes to the object itself, including adding and removing properties and changing their values. However, nested object does not automatically freeze . [1]
For example, in Object.freeze({options: {size: 2}}), the internal options can still be changed if it is not separately frozen. This is important for shared settings. Do not describe freeze as protection against any change to the entire data column. Under strict mode, an attempt at an inadmissible record can throw an error; the way it is handled is also part of the behavior.
Sources
For further detail and to check the information: