非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceError异常

请问在非严格模式下以下JS代码最终的输出是什么?

function change(obj) { with(obj) { color = 'red' } } var box = { size: '15*15' } change(box); console.log(color);

A
undefined

B
null

C
red

D
报错

正确答案:C

需要明确with会创建一个新的作用域,由于box本身没有color这个变量,所以这个操作相当于往全局定义了一个值为red的全局变量,而不是在box对象中定义,因此可以全局访问color。

with 代码块内部,每个变量首先会指向 obj 对象属性,所以color = 'red' 可以等效于obj.color = red

但是obj身上并没有color这个属性,于是去change函数的作用域寻找color但也没有找到,

最后在全局作用域没有color的情况下,于是直接设置 全局.color = 'red'

这就是数据泄漏的过程,经过一通操作,color泄露到全局

非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceError异常


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17834976.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示