前端学习笔记-1-谈及var/let/const的异同

本文详细比较了JavaScript中var、let和const在作用域、重复声明、绑定位置、变量提升以及const的只读特性。特别强调了let和const的区别,以及它们对原始值类型和对象类型的处理方式。
摘要由CSDN通过智能技术生成

一、探究var、let和const的异同:

因经常在webstorm上写var被推荐更改为let,于是重点突破一下这方面异同。

1、var和let:

(1)作用域:

var的作用域为全局或函数块中的范围,而let的作用域为全局、函数块或if、while等代码块的范围,更接近c++或Java的赋值逻辑。

相比之下let比var更具灵活性。

(2)重复声明:

var支持重复声明,而let不支持(会报错)。

var实例:

var a=1;
var a=2;
console.log(a);  //输出2

function(){
    var a=3;
    var a=4;  //输出4
}

let实例:

  let a = 1;
  let a = 2;  // SyntaxError: Identifier 'a' has already been declared
(3)绑定全局对象:

var在全局环境中声明时,会在全局对象中新建一个属性,而let不会。

具体表现:var声明的变量被储存在[[scopes]][1]:global中,let声明的变量被储存在[[scopes]][0]:script中。

(4)变量提升与暂存死区:

通俗的讲:

var在创建时直接完成初始化。

如下代码:

console.log(a);
var  a=10;
//不会报错,输出undefined

在控制器中执行的代码是:

var a;
console.log(a);
a=10;

这就是变量提升,函数也有同样的函数提升

而let在创建时不会完成初始化,即需等待初始化完成后才可以调用。

摘录定义:在变量初始化前访问该变量会导致 ReferenceError,因此从进入作用域创建变量,到变量开始可被访问的一段时间(过程),就称为暂存死区(Temporal Dead Zone)。

2、let和const:

(1)区别:

let和const都具有上文所提的let的属性,不同的是const声明的是一个只读变量,只允许使用不允许更改,因此const声明的变量在创建时就必须初始化,否则会报错。

(2)关于只读变量的理解:

const并不是保证变量的值不变,只是保证储存该变量的地址中的值不变

JS中分为两类数据类型:原始值类型和对象。

对于原始值类型:值就储存在变量指向的那个地址中,所以const声明的变量等同于常量。

对于对象类型:变量储存的只是指向该对象的指针,所以不可修改的只是该指针,内部值仍可修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值