var、let 及 const 区别

var相信大家都清楚,随着ES6规范的出现,新增了let和const来定义变量,那么他们三个有什么区别呢?

一、变量提升

console.log(a); // undefined
console.log(b); // ReferenceError: b is not defined
var a = 1;
let b = 2; //const同

从上述代码中我们可以发现,虽然变量a还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做变量提升,并且提升的是声明,初始化不会被提升。const和let由于存在暂时性死区,所以在声明前不能使用。

所以上述代码可以这样写:

var a;
console.log(a);// undefined
console.log(b); // ReferenceError: b is not defined
a = 1
let b = 2;

不仅变量会提升,函数也会被提升

console.log(a) // [Function: a]
function a() {}
var a = 1

对于上述代码,打印结果是 [Function: a],即使变量声明在函数之后,这也说明了函数会被提升,并且优先于变量提升。

二、作用域

let,const使用的是块级作用域,var是使用函数作用域。

  • 块级作用域:任何一对花括号 { } 中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,被称为块级作用域,比如if( ){ } ,for( ){ }中的花括号都是块级作用域。
  • 函数作用域:函数作用域很明显是function(){ }的形式,定义在函数中的参数和变量在函数外部是不可见的

三、let和const

相同点:

  • 在同一作用域中不可以重复定义
  • 声明前不能使用
  • 块级作用域

不同点: 

const定义的是常量,在声明的时候就必须要赋值,且这个值不能再被改变,否则会报错(若是对象,其实对象里的内容是可以修改的,在此不做解释)

四、其他

var 在全局作用域下声明变量会导致变量挂载在 window 上,其他两者不会

var a = 1
let b = 1
const c = 1
console.log(window.a) // 1
console.log(window.b) // undefined
console.log(window.c) // undefined

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值