const、let、var三者区别

以前一直都是无脑var,仔细了解一下 const、let、var的区别,才发现能不用var就尽量不用

目录

一、var的特点

  1、存在变量提升(在变量声明之前调用,为 undifined)

  2、一个变量多次声明,后面声明覆盖前面

  3、在函数中使用 var 声明变量的时候,该变量是局部的

  4、如果在函数内不使用 var, 该变量是全局的

  5、在一般代码块内(非函数内),不受代码块限制

二、let的特点

  1、不存在变量提升,let声明变量前,该变量不能使用(暂时性死区)

  2、在块级作用域内有效

  3、let不允许在相同作用域中重复声明

三、const的特点

  1、const声明一个只读的变量,声明后,值就不能改变

  2、const必须初始化

  3、const的变量是对象,其对象内容可变,变量指向的地址不可变

  4、let该有的特点const都有

四、区别

五、使用


一、var的特点

  1、存在变量提升(在变量声明之前调用,为 undifined)

console.log(x);   //变量声明之前调用 undifined
var x = 123;

//相当于编译过程
var x;
console.log(x);
x = 123

  2、一个变量多次声明,后面声明覆盖前面

var x = 123;
var x = 321;
console.log(x)    //20

  3、在函数中使用 var 声明变量的时候,该变量是局部的

var x = 123;
function test(){
  var x = 321;    //函数内部var声明 --> 局部变量
}

test();
console.log(x);    //321

  4、如果在函数内不使用 var, 该变量是全局的

var x = 123;
function test(){
  x = 321;        //即使在函数内部,没有使用var等关键字声明 --> 变量是全局的
}

test();
console.log(x);   //321

  5、在一般代码块内(非函数内),不受代码块限制

  开发过程中,若使用控制语句判定在特殊情形下声明变量并赋值,为false的情况下外部依然可用该变量,但是不会成立if里的逻辑,只是一个 undifined(而不是找不到变量,或者为空)

//此处受到条件控制语句false的影响,并没有成功把123赋值给id
if(false){
  var id = 123;
}
console.log(id);      //undefined

二、let的特点

  1、不存在变量提升,let声明变量前,该变量不能使用(暂时性死区)

console.log(x)    //报错:x is no defined
let a = 123;

  2、在块级作用域内有效

{
  let x = 123;
}

console.log(a);    //报错: x is not defined

  3、let不允许在相同作用域中重复声明

let x = 1;
let x = 2;      //报错:Identifier 'x' nas already been declared

let y = 1;
{
  let y = 2;    //正确
}

三、const的特点

  1、const声明一个只读的变量,声明后,值就不能改变

const x = 123;
x = 321      //不能改变,报错:Assigment to constant variable

  2、const必须初始化

const x;  //const常量之意:只读不可变、声明必须初始化

  3、const的变量是对象,其对象内容可变,变量指向的地址不可变

const obj = {
				name: '小廖'
			}
			console.log(obj.name);    //小廖
			
			obj.name = '大廖'
			console.log(obj.name);    //大廖

  4、let该有的特点const都有

//不存在变量提升
//块级作用域内有效
//相同作用域下不可重复声明

四、区别

  1、变量提升

    var存在变量提升 --> 变量声明之前调用不报错,而是值为 undefined

    let和const不存在变量提升 --> 变量声明之前调用会报错

  2、块级作用域

    var不存在块级作用域问题(注意:函数代码块内除外)

    let和const存在块级作用域

  3、重复声明(同作用域下)

    var允许重复声明,后覆盖前

    let和const不允许重复声明变量

  4、修改变量

    var和let可以修改

    let和const声明的是只读常量 --> 一旦声明,常量值不可再修改(但是引用类型的值只是内存地址不可变,其里面的数据可变)

五、使用

  1、const>let>var:能用const尽量使用const,多数情况使用的是let,var尽量避免使用(变量提升、非块级、声明覆盖可能在开发过程中造成麻烦问题)

  2、let声明:①.没有变量提升问题,先声明再使用更规范   

                      ②.块级作用域中不会影响全局中其他变量

  3、const声明:让人一看就知道此变量不可修改 --> 从而避免开发对常量值修改而产生bug
 

使用场景:let一般用于基本数据类型,const一般用于引用数据类型

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值