【发布时间】:2019-07-12 15:23:28
【问题描述】:
为什么我可以多次声明一个变量?我预计会出错。
此代码引发错误:
let a = true;
let a = false;
未捕获的语法错误:标识符“a”已被声明
为什么这也不会引发错误?
var b = true;
var b = false;
预期:未捕获的 SyntaxError:标识符“b”已被声明
【问题讨论】:
标签: javascript function ecmascript-6 var
为什么我可以多次声明一个变量?我预计会出错。
此代码引发错误:
let a = true;
let a = false;
未捕获的语法错误:标识符“a”已被声明
为什么这也不会引发错误?
var b = true;
var b = false;
预期:未捕获的 SyntaxError:标识符“b”已被声明
【问题讨论】:
标签: javascript function ecmascript-6 var
这是因为var 存在变量提升,但let(或const 对此没有)。
这意味着每次您使用var 时,它都会取消之前的操作,因为对于 JavaScript 解释器,您的第一个代码如下所示:
var b;
b = true;
b = false;
但这不适用于let 或const,因为let 和const 是块作用域,而var 是函数作用域。
【讨论】:
var 被提升;重复的变量名被忽略。对于解释器,您的第二个 sn-p 看起来像:
var b;
b = true;
b = false;
相比之下,let没有被提升,因此禁止重复声明。
【讨论】:
var、let、const、function、function*、class)都在 javascript stackoverflow.com/a/31222689/3082296 中提升