为了账号安全,请及时绑定邮箱和手机立即绑定

对象深度冻结中的递归调用

对象深度冻结中的递归调用

萧十郎 2018-10-10 17:13:37
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的属性值已经被冻结了吗?然后接下去的代码是如何运行的。。。我说的有点抽象,不知道各位大佬能看懂么。。。
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

首先明白冻结返回的是传入的那个对象,内层对象的冻结返回值被废弃了,因为不需要,最后最外层的这个对象被返回,返回时内部所有的对象都被冻结好了

这样说能明白么?


查看完整回答
反对 回复 2018-11-24
  • 1 回答
  • 0 关注
  • 429 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信