var let const区别

var:变量可以多次声明

let:变量只能声明一次

var存在的两个bug

JS没有块级作用域
通过var声明的变量,其作用域是函数的全部
循环内变量会过度共享
意思就是说在循环内部定义的变量,在循环外部依旧可以访问

let存在的意义

let声明的变量拥有块级作用域
let声明的变量其作用域只是外层块,而不是外层函数
let声明的全局变量不是全局对象的属性
通过let声明的全局变量无法通过window.变量名进行访问,其只存在于一个相对的作用域中

形如 for(let x in data) 的循环在每次迭代时都会为 x 创建新的绑定
let声明的变量无法重新被定义
let变量在声明前无法被调用
这个比较基于花括号包裹的作用域中声明了变量name ,所以JS编译器会根据ES6规定的 变量在声明之前无法使用 抛出错误
var声明的变量可以被使用是因为存在 变量提升

if (true) {
  name = 'abc' // name is no defined
  let name
}

if (true) {
  name = 'abc'
  console.log(name) // abc
  var name
}

const的作用

const就是用于定义常量的,常量(不会改变的变量)有以下特点
声明时必须赋值
赋值后不可以改变

1 const 和 let 具有块级作用域

外层作用域无法读取内层作用域的变量

2 const 和 let 不会进行声明提升

只能在声明的位置后使用

3 . const 和 let 不允许在相同的作用域里面重复声明
4. const 和 let 定义的变量/常量不能和函数重名
5. const 和 let 定义的变量/常量不属于window对象

   顶层对象的属性与全局变量挂钩,被认为是JavaScript语言最大的设计败笔之一。即: window既值浏览器窗口,又表示顶层对象。 
ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

 6. const 声明的是只读的常量


  声明后不能被修改

总结:
默认情况下应该使用const,只有知道变量需要被改变时才使用let,这样预期外的改动都可以算作是bug处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值