为啥我可以在javascript中删除一个声明为a = 1的变量而不是一个声明的var b = 1 [重复]

Posted

技术标签:

【中文标题】为啥我可以在javascript中删除一个声明为a = 1的变量而不是一个声明的var b = 1 [重复]【英文标题】:Why can I delete a variable declared a = 1 and not one declared var b = 1 in javascript [duplicate]为什么我可以在javascript中删除一个声明为a = 1的变量而不是一个声明的var b = 1 [重复] 【发布时间】:2016-04-26 01:41:10 【问题描述】:

假设我们在全局范围内:

当我在 JS 中声明一个变量时:

a = 1

我知道这不是正确的方法(但这不是问题)。 我可以使用:

delete a (> returns true)

但是当我声明时:

var b = 1

我不能使用:

delete b (> returns false)

谁能解释这种行为?

【问题讨论】:

完整代码是什么?一个是全局变量(没有 var),另一个是声明它的函数的本地变量。 【参考方案1】:

delete 仅对对象的属性有效。它对变量或函数名称没有影响。

https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/delete

a 变成/最终被解释为window.a,而b 显然指的是一个局部变量

【讨论】:

您也可以通过window.b 访问b 这一事实也增加了混乱... 是的,我们不要讨论这个问题,否则我们都需要一杯烈性酒...... ;)

以上是关于为啥我可以在javascript中删除一个声明为a = 1的变量而不是一个声明的var b = 1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

深入理解javascript--笔记

为啥在 JavaScript 中使用 getRangeAt() 会从选择中删除一些内容?

javascript 释放变量

为啥在 JavaScript 的 IF 语句中允许重新声明变量

为啥我可以在成员函数中使用尚未声明的成员变量?

Java:为啥我不能将数组声明为简单对象?