Object.deepFreeze = function(obj) {
var propNames = Object.getOwnPropertyNames(obj);
propNames.forEach(function(name) {
var prop = obj[name];
if (typeof prop == 'object' && prop !== null) {
Object.deepFreeze(prop); // 第六行
}
});
return Object.freeze(obj);
}
const obj = Object.deepFreeze({
a: {
b: 1
}
});
在代码的倒数第四行,传入的对象是:
{
a: {
b: 1
}
}
当检测到属性名a
的属性值为一个非空对象的时候,对a
的属性值进行Object.deepFreeze
的递归调用,此时代码第六行运行结束后应该返回的是一个被freeze过的{b:1}
,然后在继续返回被深度冻结的大对象。
我想问一下,代码中递归调用返回被freeze过的{b:1}
之后,这个返回值去哪里了。。。这样就算这个属性a
的属性值已经被冻结了吗?然后接下去的代码是如何运行的。。。
我说的有点抽象,不知道各位大佬能看懂么。。。
月关宝盒
相关分类