var let const 区别

var let const 区别

注:let和const是ES6提出的。

Ⅰ、是否存在变量提升?

使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值 var : 函数级作用域 、变量提升 、值可更改( 函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,可以在整个函数的范围内使用及复用 ) let : 块级作用域 、不存在变量提升 、值可更改 const :块级作用域 、 不存在变量提升 、值不可更改

​console.log(a); // undefined  ===>  a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b); // 报错:b is not defined  ===> 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined  ===> 找不到c这个变量
const c = 10;

Ⅱ、是否存在暂时性死区
let和const存在暂时性死区。即只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。( let 命令声明变量之前,该变量都是不可用的。
这在语法上,称为 “暂时性死区”。形成封闭的作用域)。
总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

var tmp = 123;
if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
//以上代码if后面{}形成了块级作用域,由于使用let声明了tmp,则这个变量就绑定了块区域,在声明之前使用,会报错。

​

Ⅲ、是否允许重复声明变量?
var允许重复声明变量。
let和const在同一作用域不允许重复声明变量。

var f = 4;
var f = 5;
console.log(5) //5

let g = 6;
let g = 7;
console.log(7) //SyntaxError: Identifier 'g' has already been declared

const h = 8;
const h = 9;
console.log(h) //SyntaxError: Identifier 'g' has already been declared

Ⅳ、是否存在块级作用域?
var不存在块级作用域。
let和const存在块级作用域。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值