let
、var
和 const
都是JavaScript中用于声明变量的关键字,但是他们之间有一些关键的区别。
1. 作用域:
var
:变量声明时会被提升到函数作用域的顶部,但初始化不会提升。var 声明的变量在全局作用域或函数作用域中有效。
console.log(a)
var a=10 //undefined
let
:变量是块级作用域的,意味着它们仅在声明它们的块(例如一个循环或条件语句)或子块中有效。
{
let a = 10
}
console.log(a) //Uncaught ReferenceError: a is not defined
而把let改成var则会输出10。
const
:与 let
类似,const
声明的变量也是块级作用域的。
2. 重复声明:
var
:可以在相同的作用域内重复声明同一个变量。
var a = 10;
var a = 11;
console.log(a)
let
:在相同的作用域内不能重复声明同一个变量。
const
:在相同的作用域内不能重复声明同一个变量。
3. 初始化:
var
:可以先声明变量而不进行初始化,稍后赋值。
let
:可以先声明变量而不进行初始化,稍后赋值。
const
:声明变量时必须进行初始化,且一旦赋值后,其引用的值不能被改变(但对于对象和数组,可以改变其内部的属性和元素)。
4. 修改:
var
:声明的变量可以被重新赋值。
let
:声明的变量可以被重新赋值。
const:声明的变量不能被重新赋值,但如果是对象或数组,可以修改其内部的属性或元素。
const PI = 3.14
PI = 3 //报错
const f = {}
f.a = 1 //可以添加属性
const f = Object.freeze({}) //冻结对象
总结来说,let
和 const
是ES6(ECMAScript 2015)
引入的新特性,它们提供了更好的作用域控制和防止了一些常见错误。cons
t 用于声明不应该改变的变量,而 let
用于声明块级作用域的变量。var
是旧式的变量声明方式,由于作用域和提升行为可能会导致一些难以发现的错误,因此在现代JavaScript
编程中,推荐使用 let
和 const
代替 var
。