欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

var,let,const区别详解

程序员文章站 2022-03-22 10:07:21
ES6新增了两种声明变量的方式:let,const二者的出现解决了ES5 javaScript没有块级作用域的问题。但是三个声明变量的方式存在着一定的区别。1.作用域:var的作用域:只存在于当前作用域。var var1 = 'global';function func(){ var var2 = 'function';}for(var var3 = 0; var3 < 10; var3++){}console.log(var1);//定义在全局 globalconsol...

ES6新增了两种声明变量的方式:let,const
二者的出现解决了ES5 javaScript没有块级作用域的问题。但是三个声明变量的方式存在着一定的区别。

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