【发布时间】:2020-04-09 11:32:04
【问题描述】:
为什么隐式变量是可配置的,而显式变量和函数声明却不是?
foo = ''
console.log(Object.getOwnPropertyDescriptor(window, 'foo')) // configurable: true
var bar = ''
console.log(Object.getOwnPropertyDescriptor(window, 'bar')) // configurable: false
【问题讨论】:
-
隐式创建的变量没有被声明。
-
这听起来像是对问题的重述?
-
解释
MDN ref -
事实上,这是一个很好的解释。
foo是window的属性,因此您可以像操作它一样操作它……嗯,一个普通属性。然而bar是一个声明的变量,它也恰好是window的一个属性。所以,配置它会导致奇怪的行为——使var不可写是什么意思,现在它是一个常量吗?但是等等,它不能,因为它是一个var变量,所以如果你不能写入它就会不一致。 -
好吧,我删除了“因为”,在您询问不存在的“声明的隐式变量”的编辑之前。不过,这也是一种解释。
标签: javascript