1. let、const 和 var
ES6 引入了一些新的语法特性。其中之一就是使用关键字const和let来声明变量。让我们来谈谈为什么它们比var更受欢迎。
范围🔭
var
具有函数作用域。这意味着它可以在定义它的函数的任何地方访问。请看以下示例:
function buyHerChocolate(onDiet) {
if (onDiet) {
var decision = "Don't do it!";
} else {
var decision = "Go buy it!"
}
console.log(decision);
}
buyHerChocolate(true);//"Don't do it!"
console.log(decision);//Uncaught ReferenceError: decision is not defined
正如您所见,定义的决策var
变量在函数范围内可用,但是当我们尝试在函数外部记录它时,控制台会抛出错误,decision is not defined
就好像它从未存在过一样。
相反,let
并且const
具有块{}
范围。
function buyHerChocolate(onDiet) {
if (onDiet) {
let decision = "Don't do it!";
console.log(decision);
} else {
let decision = "Go buy it!"
console.log(decision);
}
console.log(decision);
}
buyHerChocolate(true);
//"Don't do it!"
//Uncaught ReferenceError: decision is not defined
console.log(decision);//Uncaught ReferenceError: decision is not defined
惊喜!在表达式块内记录决策的值会导致预测的字符串,而在块外执行相同操作会引发错误,在函数范围外执行相同操作也会引发错误。
也发生同样的事情const
。
提升⏫
用 声明的变量var
会被提升到其作用域的顶部。需要注意的是,变量声明才是被托管的对象,而不是赋值操作。
console.log(x);
var x = 5;//undefined
发生了什么?!console.log()
直到提升任何变量后,函数才会执行var
。因此,var x
; 将上升到全局作用域的顶部。然后 console.log(x) 被执行并输出 undefined,因为此时 x 没有值。x 被赋值为 5。如下所示:
var x;
console.log(x);
x = 5;
因此,如果我们console.log(x)
之后再执行此操作,它会在控制台上打印 5。
这种奇怪的行为可能会在大型程序中引入错误。
let
并且const
不会被吊起。
console.log(x);
const x = 5;//Uncaught ReferenceError: x is not defined
声明与任务✒️
var
变量可以在同一作用域内多次重新声明并重新赋值。let
变量不能重新声明,但可以在同一作用域内重新赋值。const
变量不能在同一作用域内重新声明或重新赋值。此外,必须同时声明和赋值变量。因此,我们不能这样做:
const y;//Uncaught SyntaxError: Missing initializer in const declaration
但我们必须这样做:
const y = 5;
因此,如果您的变量的值发生了变化,请使用 进行声明let
,如果不是,则始终使用const
。
它们之间的这些差异var
将会防止命名冲突。
结论:
出于上述原因,const
除变量需要重新赋值的情况外,所有情况下都应使用 。在这种情况下,let
请使用 。大多数文章建议开发人员避免使用var
。为什么var
还有人会使用 ?!
你同意我的观点吗?请留言告诉我你的看法。
进一步阅读:
文章来源:https://dev.to/blueturtle/1-const-let-and--var-4cdh