var、let、const的区别

1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。

2.使用let声明的变量,其作用域为该语句所在的代码块内不存在变量提升

3.使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

4.let、const无法重复声明

var let const
函数级作用域 块级作用域 块级作用域
变量提升 不存在变量提升 不存在变量提升
可更改值 可更改值 不可更改值

代码:

1.作用域

var的作用域:只存在于当前作用域。

var var1 = 'var1';
function func(){
    var var2 = 'var2';
}
for(var var3 = 0; var3 < 10; var3++){

}
console.log(var1);//定义在全局 var1
console.log(var3);//定义在块级作用域内 10
console.log(var2);//定义在函数内 报错

let的作用域:当前块级作用域内

let let1 = 'let1';
function func(){
    let let2 = 'let2';
}
for(let let3 = 0; let3 < 10; let3++){

}
console.log(let1);//定义在全局 let1
console.log(let2);//定义在函数内 报错
console.log(let3);//定义在块级作用域内 报错

const作用域:当前块级作用域内

const const1 = 'const1';
function func(){
     const2 = 'const2';
}
if(const1){
    const const3 = 'const3';
}
console.log(const1);//定义在全局 const1
console.log(const2);//定义在函数内 报错
console.log(const3);//定义在块级作用域内 报错

2.const声明的是常量

const year = 2020;
year = 2021; //报错

const month;//报错

const obj = {
    year:2020 
};
obj.year = 2021;
console.log(obj.year); //2021 不报错

const声明的是基础类型(String,Number,boolean,null,undefined)时,该变量无法改变,且声明时必须初始化,否则会报错。但是声明引用类型时,则只有指向的地址无法改变,该变量可以改变。

3.let、const无法重复声明

let year = 2020;
let year = 2021; //报错
const year1 = 2020;
const year1 = 2021;//报错
var year2 = 2020;
var year2 = 2021;//不报错

4.var存在变量提升

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。let和const则不会发生。

console.log(var1);//undefined
var var1 = 'var1';
console.log(let1);//报错
let let1 = 'let1';
console.log(const1);//报错
let const1 = 'const1';

5.顶层变量

在全局声明的变量,var声明的变量会同时是顶层对象的属性,但是let与const不是。(浏览器内,顶层对象是windw,node是global,采用this在两个环境内都可)

var var1 = 1;
console.log(this.var1);//var1

let let1 = 1;
console.log(this.let1) // undefined

let const1 = 1;
console.log(this.const1) // undefined

转载:https://blog.csdn.net/qq_44756398/article/details/107391809

posted @ 2020-11-21 23:43  水熊虫喵了个咪  阅读(87)  评论(0编辑  收藏  举报
/* 返回顶部代码 */ TOP