js中 var、let 、const的区别

js中三种定义变量的方式var、let、const的区别

var

使用var可以定义全局变量,没有块级作用域的概念,比如:for循环中用var定义的变量,在for循环结束之后依然可以使用

for(var i=0;i<10;i++){}
console.log(i);//10

var 定义的变量存在变量提升,无论实际定义的位置,都会视为在全局作用域(或者函数顶部)

console.log(a);//undefined
var a = 1;

//实际相当于
var a;
console.log(a);
a = 1;

let

let 是块级作用域,不存在变量提升,如果在定义之前使用变量的话就会报错 在let 声明变量之前,该变量都是不可用的,在语法上,称为 暂时性死区

console.log(num);
let num = 10;

QQ截图20210305000536.png

let 在同一作用域内不能重复定义,重复定义会报变量已声明的错误

let num = 1;
let num = 2

QQ截图20210305000718.png

因为let 是块级作用域,所以在函数内部重新定义之后不会改变函数外部的值

let num = 1;

function test(){
   let num = 2;
}
test();
console.log(num);//1

const

const 也是块级作用域,在定义的时候必须赋值,而且定义之后不允许再修改

const 声明的限制只适用于它指向的变量引用,换句话说,如果const变量引用的是一个对象,那么修改这个对象的内部属性并不违反 const 的限制

//如果定义的时候没有赋值,则会报错
const num;

// const person = {}

person.name = '张三' // ok

person = {}   //报错

QQ截图20210305001324.png

//块级作用域
const num = 1;

function test(){
   const num = 2;
}
test();
console.log(num);//1