javascript - 声明变量时使用 var 和 not 有什么区别?
问题描述
var a = 123;
b = 456;
console.log(window.a, window.b); // 123, 456
delete window.a; // true
delete window.b; // false
console.log(window.a, window.b); // 123, undefined
如果不使用var,为什么不能删除全局变量?
解决方案
请参阅删除运算符:
任何用 var 声明的属性都不能从全局作用域或函数作用域中删除。
当你使用
b = 456;
解释器把它变成
window.b = 456;
也就是说,对window
对象上的属性的赋值。但是a
不同 - 虽然它也恰好被分配给window
对象的属性,但它现在也是LexicalEnvironment
(而不仅仅是作为对象的属性)的一部分,因此不能通过delete
.
var a = 123;
b = 456;
console.log(Object.getOwnPropertyDescriptor(window, 'a'))
console.log(Object.getOwnPropertyDescriptor(window, 'b'))
看看用var
has声明的变量如何configurable: false
,而隐式b
赋值有configurable: true
。
推荐阅读
- java - Gremlin Spark Java Maven 项目 - 查询响应慢
- c - 使用函数指针和 qsort 进行快速排序
- c# - 将命令行参数传递给 roslyn 编译器
- javascript - 无法读取未定义的属性“变量”-JS
- java - 如果比较器使用了其他一些变量,那么比较器何时消耗该变量?
- parsing - ANTLR 在开始时不识别令牌
- scala - 如何为在 Docker Compose 中运行的 SBT 提供环境变量?
- javascript - 数据表 - 未捕获的类型错误:ba 未定义
- visual-studio - Visual Studio Code:单个文件中的多个空格/选项卡设置 - 可能吗?
- html - 有没有办法组合这些行?html抓取