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