在eval中使用var声明的全局变量可以被delete删除; 未使用var声明的全局变量可以使用delete进行删除
执行完如下程序后,所有能被访问到的变量包括()
A
a、b、c
B
a、c
C
a
D
c
在eval中使用var声明的全局变量可以被delete删除,所以变量c能删除成功,
除此之外,在其他情况下,使用var声明的全局变量或者局部变量一般是不能被delete删除的,所以变量a无法被删除,仍然可以访问到,
而未使用var声明的全局变量可以使用delete进行删除,所以无法访问到b。综上,只有变量a未被成功删除,可以访问得到
决定属性是否可以删除的关键在于属性描述属性值configurable是否是true,var定义的变量的configuarable的值是false,另外两个是true.
可以用
Object.getOwnPropertyDescriptor(window, 'a'),
Object.getOwnPropertyDescriptor(window, 'b'),
Object.getOwnPropertyDescriptor(window, 'c')验证
delete() delete 操作符用于删除对象的某个属性
var, let以及const创建的不可设置的属性不能被delete操作删除
不可配置属性configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认值为true。
ES6以后除了全局对象以外还维护了一个变量名列表,专门用来存储var,let,const声明的变量,并且约定了该列表里面的变量不能被delete删除,所以a变量无法被删除。
尽管var a =1;b =2 都是全局变量,都可以通过全局对象访问到。但b不是var声明的,可被delete删除,因此访问不了
eval中声明var变量是唯一一个被添加到变量名列表同时也可以被delete删除的特例,所以删除变量c有效
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17829176.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)