返回

谈谈JS中Let与Var为何不能声明同名变量

前端

JS 中的变量声明

在 JavaScript 中,变量声明使用 varletconstvar 是传统的变量声明方式,而 letconst 是 ES6 中引入的新声明方式。

使用 var 声明变量

使用 var 声明变量时,变量的作用域是整个函数或脚本。这意味着,在函数或脚本的任何地方都可以访问该变量。

var x = 10;

function myFunction() {
  // x is accessible here
  console.log(x);
}

myFunction(); // logs 10

使用 let 声明变量

使用 let 声明变量时,变量的作用域是块级作用域。这意味着,变量只能在它被声明的块内访问。

let x = 10;

if (true) {
  // x is accessible here
  console.log(x);
}

console.log(x); // ReferenceError: x is not defined

使用 const 声明变量

使用 const 声明变量时,变量的作用域是块级作用域。此外,const 声明的变量是只读的,这意味着不能重新赋值。

const x = 10;

x = 20; // TypeError: Assignment to constant variable.

为什么使用 letvar 声明同名变量会报错?

在 JavaScript 中,使用 var 重复声明同名变量是允许的。但是,使用 letvar 声明同名变量时却会报错。这是因为 let 声明的变量是块级作用域的,而 var 声明的变量是函数或脚本级作用域的。

当使用 letvar 声明同名变量时,let 声明的变量会覆盖 var 声明的变量。这会导致 var 声明的变量无法访问,从而引发错误。

let x = 10;
var x = 20;

console.log(x); // 20

结论

在 JavaScript 中,使用 var 重复声明同名变量是允许的。但是,使用 letvar 声明同名变量时却会报错。这是因为 let 声明的变量是块级作用域的,而 var 声明的变量是函数或脚本级作用域的。

当使用 letvar 声明同名变量时,let 声明的变量会覆盖 var 声明的变量。这会导致 var 声明的变量无法访问,从而引发错误。