javascript - 使用 var 与 let/const 的 block 级变量重新声明

标签 javascript variables ecmascript-6

第 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/

相关文章:

javascript - VueJS : Adding to existing HTML and handling imports

javascript - 将嵌套对象解构为函数参数

javascript - 如何通过 Webpack 导入和使用 bootstrap-vue

node.js - 使用 rewire 测试 Node ES6 模块 - 函数未定义

javascript - 如何在 Angular 5 中调用外部 javascript 函数?

javascript - 忽略出现在引号内的分隔符的 JS split() 函数

java - javascript中的AES加密和java中的解密

bash - 直到用户输入等于某事做

variables - 我应该如何定义包含逗号的 Stylus 哈希值?

php - _GET 变量的奇怪行为