JS窗口变量声明和行为

时间:2018-06-11 06:08:49

标签: javascript global-variables

我有两个不同的全局变量。我认为因为它们都是窗口对象的属性,所以它们的行为应该相同。但事实并非如此。我只能删除其中一个,它被明确声明为一个窗口属性。无法删除 var 运算符声明的那个:

window.y1 = 'Y1';
"Y1"
var y2 = 'Y2';
undefined
y1;
"Y1"
y2;
"Y2"
window.y1;
"Y1"
window.y2;
"Y2"
delete window.y1;
true
delete window.y2;
false

我不清楚为什么。你可以解释吗?

1 个答案:

答案 0 :(得分:1)

全局对象上的

var是不可配置的,这意味着它们无法删除:

var y2 = 'foo';
console.log(
  Object.getOwnPropertyDescriptor(window, 'y2')
);

行为符合预期。正如MDN所说:

  

使用var声明的任何属性都不能从全局范围或函数范围中删除。

另一方面,显式地将属性分配给对象 会导致该属性可配置,默认情况下:

window.y2 = 'foo';
console.log(
  Object.getOwnPropertyDescriptor(window, 'y2')
);