js中的with了解一下
创始人
2024-11-11 05:09:37
0

官方提示:已弃用, 不再推荐使用该特性。
虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。

来了解一下为啥要弃用的理由:

语法: with(expression){…}

expression: 将给定的表达式添加到在评估语句时使用的作用域链上。with会创建一个新的作用域,

就是说,with 代码块内部,每个变量首先会指向 expression 对象属性,如果expression 对象上面没有这个属性,那么就会依次向上找,如果一直找不到,最终就会在顶层定义一个属性名的变量,这时候就会发生变量的泄漏

上代码演示吧:

function test(obj){     with(obj){         age = 100;     } } 

我们定义了一个函数,参数为一个对象,我们想通过with的形式给传入的obj对象修改age属性

let obj1 = { name: 'mike', age: 18} let obj2 = { name: 'lili' } 

我们分别定义了两个对象,一个包含age属性,另一个不包含age属性

下面我们来运行一下test方法吧

test(obj1) obj1 // {name: 'mike', age: 100} test(obj2) obj2 // {name: 'lili'} age // 100 

通过代码的执行,我们看到包含age属性的对象,通过with中的执行语句修改了对象的age属性,但是不包含age属性的对象,并没有修改

实际上with中的age = 100,开始的时候会找obj2上面时候有age属性,如果没有,他会往上面找,显然test方法中也没有这个age,那么就会再次往上找,直到全局作用域,还是没有,这时候就会新建一个age属性,然后赋值为100了
显然上面操作obj2的时候是有问题的,我们并不是要在全局新建一个age的属性,而且函数的数据也被泄漏到全局中了

所以,弃用是必须的

上一篇:HCIP笔记1

下一篇:100条超牛的DOS命令

相关内容

热门资讯

黑科技讲解(wepoke软件透... 黑科技讲解(wepoke软件透明挂价格)外挂黑科技辅助器(透视)总是有挂(黑科技脚本)-哔哩哔哩亲,...
第5分钟黑科技!德扑之星ai软... 第5分钟黑科技!德扑之星ai软件,(德扑之星)竟然有挂,扑克教程(有挂方法)-哔哩哔哩;1、玩家可以...
黑科技安装!aapoker辅助... 黑科技安装!aapoker辅助工具下载(透视)太坑了真的是有挂(科技教程黑科技攻略)-哔哩哔哩;暗藏...
黑科技辅助挂(德扑之星发牌规律... 黑科技辅助挂(德扑之星发牌规律)外挂透明挂辅助软件(透视)果然真的有挂(黑科技解密)-哔哩哔哩1、每...
透视脚本!WPK最新ai辅助黑... 透视脚本!WPK最新ai辅助黑科技,(wPk)原来是真的有挂,黑科技自建房(有挂规律)-哔哩哔哩1、...
黑科技智能ai!智星德州菠萝a... 黑科技智能ai!智星德州菠萝app下载(透视)太坑了是真的有挂(可靠教程黑科技介绍)-哔哩哔哩;1)...
黑科技能赢(微扑克透牌软件)外... 黑科技能赢(微扑克透牌软件)外挂透明挂辅助器(透视)本来真的有挂(黑科技介绍)-哔哩哔哩进入游戏-大...
透视代打!wPK最新ai辅助黑... 透视代打!wPK最新ai辅助黑科技,(wpK)原来真的是有挂,黑科技规律(的确有挂)-哔哩哔哩1)辅...
黑科技讲解!德扑之星操作(智能... 黑科技讲解!德扑之星操作(智能ai)太坑了存在有挂(玩家教你黑科技介绍)-哔哩哔哩;暗藏猫腻,小编详...
黑科技规律(智星德州菠萝怎么看... 黑科技规律(智星德州菠萝怎么看有没有开挂)外挂透视辅助app(透视)切实真的有挂(黑科技攻略)-哔哩...