JS中const有没有变量提升

在JavaScript中,const 关键字用于声明一个只读的常量,其值在初始化后不能被重新赋值。关于变量提升(Hoisting),它是JavaScript中一个重要的概念,指的是无论变量或函数声明在何处,它们都会被“提升”到其所在作用域的最顶部。但是,这个规则不完全适用于constlet声明的变量。

变量提升(Hoisting)的传统理解

在ES6之前,JavaScript只有var关键字用于声明变量。var声明的变量确实会被提升,这意味着变量可以在声明之前被访问(尽管此时它的值是undefined)。

console.log(x); // 输出:undefined  
var x = 5;

letconst 的行为

ES6引入了letconst作为新的变量声明方式,它们的设计初衷之一就是为了解决var带来的作用域和变量提升方面的问题。与var不同,letconst声明的变量不会被提升到其作用域的顶部,并且它们遵循所谓的“暂时性死区”(Temporal Dead Zone, TDZ)规则。

在“暂时性死区”内,任何对letconst变量的访问都会抛出一个ReferenceError错误,直到变量被实际声明为止。

console.log(y); // 抛出 ReferenceError: y is not defined  
let y = 10;  
  
console.log(z); // 抛出 ReferenceError: z is not defined  
const z = 20;

结论

因此,const(以及let)声明的变量没有变量提升。这意味着你必须在声明它们之后才能访问它们,否则会导致ReferenceError错误。这一行为使得letconst在声明局部变量时更加安全和可预测。

你可能感兴趣的:(javascript,前端,开发语言)