js | 作用域

前置知识

作用域

const对象怎么禁止修改

  • 方法一: Object.freeze
  • 方法二:defineProperty+递归,对于每个节点都有:writable:false
javascript 复制代码
const obj={
    a1:{
        b1:{
            c1:'c1'
        }
    },
    a2:{
        b1:{
            c1:'c2'
        },
        b2:[]
    },
}

// solution1: Object.freeze(obj)
// Object.freeze(obj);
// obj.a2="new"
// console.log(obj)


function myFoo(obj){
    if(!obj){
        return;
    }
    Object.keys(obj).forEach(key=>{
        if(typeof obj[key]==="object"){
            Object.defineProperty(obj,key,{
                writable:false
            });
            myFoo(obj[key]);
        }
        
    });
}

myFoo(obj);
obj.a2="new"
console.log(obj)
相关推荐
薛定猫AI5 分钟前
【深度解析】GLM-5.2 与 Z-Code:AI 编程智能体的原理拆解与 Python 调用实战
开发语言·人工智能·python
没文化的阿浩6 分钟前
【C++】详解继承机制
开发语言·c++
文祐12 分钟前
C语言用双向链表实现单调递减(递增)队列
c语言·开发语言·链表
雪的季节19 分钟前
OCR: windows 环境基于c++的 paddle ocr 编译【CPU版本】编译成dll ,在QT、VS中调用
开发语言
Csvn19 分钟前
TypeScript 类型守卫的 4 个实战级别:从 `filter(Boolean)` 到自定义类型谓词
前端
蒟蒻的贤37 分钟前
python搭建MiniDL
开发语言·python·深度学习
aaPIXa62243 分钟前
C++模板元编程:在编译期完成计算,实现零运行时开销
java·开发语言·c++
云浪1 小时前
拆开 WAV,看见声音——JavaScript 二进制数组实战全解析
前端·javascript·ecmascript 6
_瑞1 小时前
深入理解灵动岛
前端·ios·app
想你依然心痛1 小时前
嵌入式日志系统:分级日志、环形缓冲区与远程输出——运行时调试、非侵入
android·前端·javascript