【发布时间】:2020-04-19 16:40:40
【问题描述】:
- 谁能解释为什么
testVariable在使用let时有两种不同的输出。为什么在window对象中定义同名变量时没有任何运行时错误?
Object.defineProperty(window, 'testVariable', {
value: 22
})
let testVariable = 12
console.log(window.testVariable) // result: 22
console.log(testVariable) // result: 12
- 但是当使用
var时,输出是一样的。
Object.defineProperty(window, 'testVariable', {
value: 22
})
var testVariable = 12
console.log(window.testVariable) // result: 12
console.log(testVariable) // result: 12
- 为什么下面的代码运行正确
<script>
Object.defineProperty(window, 'a', {
value: 33
})
let a = 13
</script>
<script>
console.log(a) // result: 13
</script>
- 但以下会引发错误。
<script>
Object.defineProperty(window, 'a', {
value: 33
})
</script>
<script>
let a = 13
console.log(a) // Uncaught SyntaxError: Identifier 'a' has already been declared
</script>
【问题讨论】:
标签: javascript var let defineproperty hoist