首页 > 其他分享 >在eval中使用var声明的全局变量可以被delete删除; 未使用var声明的全局变量可以使用delete进行删除

在eval中使用var声明的全局变量可以被delete删除; 未使用var声明的全局变量可以使用delete进行删除

时间:2023-11-13 15:14:53浏览次数:31  
标签:变量 删除 var 全局变量 声明 delete

执行完如下程序后,所有能被访问到的变量包括()

var a = 1;
b = 2;
eval('var c = 3');
delete a;
delete b;
delete c;

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有效

标签:变量,删除,var,全局变量,声明,delete
From: https://www.cnblogs.com/longmo666/p/17829176.html

相关文章

  • fastapi 的 TestClient 的 delete 方法如何传递请求体?
    在FastAPI的TestClient中,delete方法通常不适用于传递请求体(payload)。DELETE请求通常不允许发送请求体。不过,根据HTTP规范,您可以通过在URL中包含查询参数或使用params参数来传递参数。以下是使用FastAPI的TestClient进行DELETE请求时传递参数的示例:fromfastapi.testclientimportT......
  • 为什么MySQL不建议使用delete删除数据?
    MySQL并不直接建议禁止使用DELETE语句删除数据,但是在某些情况下,使用DELETE可能会带来一些潜在的问题,特别是在大型数据库中。下面我将详细介绍为什么在某些情况下MySQL不建议过度使用DELETE语句来删除数据,并探讨其可能带来的影响。1.DELETE操作的影响DELETE语句用于从表中删除......
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录
    使用ORDERBY进行排序使用ORDERBY语句按升序或降序对结果进行排序。ORDERBY关键字默认按升序排序。要按降序排序结果,使用DESC关键字。示例按名称按字母顺序排序结果:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusernam......
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录
    使用ORDERBY进行排序使用ORDERBY语句按升序或降序对结果进行排序。ORDERBY关键字默认按升序排序。要按降序排序结果,使用DESC关键字。示例按名称按字母顺序排序结果:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="youruserna......
  • 方法只能写在类里面,类外面的是函数 ; 定义函数只能function a(){} 或者 var a = funct
    下列哪几项可以创建函数?Afunction=myFunction(){……..}BfunctionmyFunction(){…...}Cmyfunction=function(){…….}DmyFunction(){….}正确答案:BCBC不谈,我说一下DD这个语法定义的是方法(method)。因为这种写法只能在class里生效,所以D这个function始终是跟一个object......
  • 语句var arr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正
    语句vararr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正确的是哪几项?AMath.max(arr)BMath.max(arr[0],arr[1],arr[2],arr[3])CMath.max.call(Math,arr[0],arr[1],arr[2],arr[3])DMath.max.apply(Math,arr)正确答案:BCDA选项错误......
  • get、post、put、delete、patch的区分
    HTTP定义了与服务器不同的交互方法,常见的方法有4种,分别是GET、POST、PUT、DELETE;而PATCH是后来新增的方法。相关基本概念幂等幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执......
  • 无涯教程-批处理 - Local Variables in Functions函数
    函数中的局部变量可用于避免名称冲突,并将变量更改保持在函数本地,首先使用SETLOCAL命令来确保命令处理器备份所有环境变量,可以通过调用ENDLOCAL命令来恢复变量,当到达批处理文件的末尾时,即通过调用GOTO:EOF,将自动调用ENDLOCAL。使用SETLOCAL对变量进行本地化允许在函数内自由使用......
  • 【misc】[HNCTF 2022 Week1]lake lake lake(JAIL) --沙盒逃逸,globals函数泄露全局变量
    查看附件内容这道题的逻辑就是可以让你输入1或者2,进入各自的函数去执行功能func函数:deffunc():  code=input(">")  if(len(code)>9):    returnprint("you'rehacker!")  try:    print(eval(code))  except:    pass......
  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析消费者价
    全文链接:http://tecdat.cn/?p=31108原文出处:拓端数据部落公众号作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意义:当PPI先行地引导着CPI的变动,则意味着上游......