在javascript中有三种声明变量的方式:var、let、const。

JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。

const定义的变量不可以修改,而且必须初始化。

它和let一样,也不能重复定义同一个变量,const一旦定义,无法修改.
let和const属于局部变量,不会出现变量提升的情况,全局定义的let和const变量,不属于顶层变量,不属于window的属性
const用来定义常量(可以是字符串,数组,函数,对象等),但他并不是不可更改的。举个例子:

const c;//会产生报错.
const d = 1;//正确

const arr = [1, 2];
arr.push(1);//正确 [1, 2, 1]
arr[0] = 3;//正确 [3, 2, 1]

arr = [];//错误TypeError: invalid assignment to const `arr'

var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

var相比let就是管的比较宽,他的值可以被内部修改。
var 声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。

var a = 1;
// var a;//不会报错
console.log('函数外var定义a:' + a);//可以输出a=1
function xx(){
a = 4;
console.log('函数内var定义a:' + a);//可以输出a=4
} 
xx();
console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。

let是es6中新增定义,带有块级作用域,只会在所定义块生效。
同一个变量,不可在声明之前调用,必须先定义再使用,否则会报错,循环体中可以用let

let c = 3;
console.log('函数外let定义c:' + c);//输出c=3
function xx(){
let c = 6;
console.log('函数内let定义c:' + c);//输出c=6
} 
xx();
console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3

let 和 const 存在“变量死区”,这点也是和 var 不同的地方。

最后修改:2021 年 08 月 26 日 07 : 16 PM
如果觉得我的文章对你有用,请随意赞赏