在 JavaScript 中,var
、let
和const
是用于声明变量的关键字。
let
和const
是JavaScript里相对较新的变量声明方式。
let
用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效。
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
对于const
来说,只声明不赋值,就会报错。
示例:
const PI = 3.1415;
console.log(PI) // 3.1415
PI = 3; // Uncaught TypeError: Assignment to constant variable.
const a; // Uncaught SyntaxError: Missing initializer in const declaration
var
、let
和 const
的区别:
重复声明
var
:可以重复声明同一个变量。let
和const
:不允许在同一作用域内重复声明同一个变量。
var a = 1;
var a = 2; // 不会报错
let b = 3;
let b = 4; // Uncaught SyntaxError: Identifier 'b' has already been declared
const c = 5;
const c = 6; // Uncaught SyntaxError: Identifier 'c' has already been declared
变量提升
var
:存在变量提升,即在变量声明之前使用该变量,不会报错,只是值为undefined
。
当函数开始的时候,就会处理var
声明(脚本启动对应全局变量)。
换言之,var
声明的变量会在函数开头被定义,与它在代码中定义的位置无关(这里不考虑定义在嵌套函数中的情况)。let
和const
:不存在变量提升,在声明之前使用会报错。
使用 var
声明,示例:
console.log(a); // 输出 undefined
var a = 10;
// 上面代码的实际执行顺序如下:
// var a;
// console.log(a);
// a = 10
使用var
声明变量 a
,会发生变量提升,即脚本开始运行时,变量 a
已经存在了,但是没有值,所以会输出undefined