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)
相关推荐
ZC跨境爬虫15 小时前
跟着 MDN 学 HTML day_33:(Attr 接口与属性节点的深入理解)
前端·javascript·ui·html·音视频·html5
skywalk816315 小时前
Trae生成的中文编程语言关键字(如“定“、“函“、“印“等)需要和标识符之间用 空格 隔开,以确保正确识别
服务器·开发语言·编程
神所夸赞的夏天15 小时前
如何获取多层json数据,存成dictionary,并取最大最小值
java·前端·json
红色的小鳄鱼15 小时前
前端面试js手写
开发语言·前端·javascript
焦糖玛奇朵婷15 小时前
健身房预约小程序开发、设计
java·大数据·服务器·前端·小程序
海盗123415 小时前
C#中的IEqualityComparer<T>使用
开发语言·c#
上海云盾王帅15 小时前
WEB业务如何接入安全防护:从零到一的实战指南
前端·安全
用户0595401744615 小时前
AI Agent记忆丢失踩坑实录:这个问题让我排查了3天
前端·css
江公望15 小时前
Qt QSharedPointer用法,10分钟讲清楚
开发语言·qt
web行路人15 小时前
前端对Commands(斜杠命令)一些常用
前端·javascript·vue.js·vue