第 1 部分
给出这个例子:
var number = 10
{
var number = 42
}
console.log(number) // 42
为什么第 4 行不抛出 Uncaught SyntaxError: Identifier 'number' has already been declared
?由于 block 作用域,它与 let
/const
一起工作(尽管输出当然是 10
而不是 42
), 但它如何与 var
一起工作呢?
第 2 部分
将此与以下内容进行比较,后者适用于 var
:
var number = 10
var number = 42
console.log(number) // 42
但不使用let
:
let number = 10
let number = 42 // SyntaxError
console.log(number)
为什么 var
获得了“免费通行证”?是否与使用 var
时将 number
属性重新分配给 window 对象有关?
最佳答案
您可以在 JavaScript 中重新声明 var
变量,即使是在严格模式下。
The scope of a variable declared with
var
is its current execution context, which is either the enclosing function or, for variables declared outside any function, global. If you re-declare a JavaScript variable, it will not lose its value.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
'use strict'
var someVar = 'Hello';
var someVar = 2 + 2;
console.log(someVar);
关于javascript - 使用 var 与 let/const 的 block 级变量重新声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028320/