var、let、const三者的区别

首先三者都是用来声明变量的

var

作用范围:var没有块级作用域,在任何位置定义的变量在外层都可以访问到
作用域:
全局作用域:在最外层定义的变量
局部作用域:在{}中定义的变量

特点:首先如果在函数内部,就优先在函数内部查找变量,如果没有就继续向外层查找

var定义的变量可以提升

console.log(a)          // 变量会提升,只是声明但是没有定义
var a = 123 

变成这样

var a     // 变量提升
console.log(a)     // 输出undefined
a = 123

let

let声明的变量只是在它所在的代码块中有效
for (let i = 0;i<10;i++){
  console.log(i)
}
console.log(i)    //  i is not defind

因为是let声明的变量,只是在块级作用域中有效,外部无法访问,所以会报错

不可以重复声明定义
function a () {
  let b = 123
  let b = 234
  console.log(b)
}
a()

这里会报错:Identifier 'a' has already been declared

不存在变量的提升
console.log(aa)   // undefined
var aa = 123

console.log(foo)    // 报错
let foo = 'abc'
块级作用域
function foo () {
	let a = 123
	if (true) {
		let a = 234
	}
	console.log(a)
}
foo()    // 输出123

const

定义常量,一旦定义不可修改
const a = 123
a = 235
console.log(a)    // 报错 Identifier 'a' has already been declared
块级作用域
if (true) {
	const foo = 123
}
console.log(foo)   // 报错  a is not defind
不可重复声明
const foo = 123
const foo = 234
console.log(foo)     // 报错  Identifier 'foo' has already been declared
不存在变量提升
console.log(a)  // foo is not defined
const a = 123
引用类型不可直接修改值(赋值),但是可以添加属性
const arr = []
arr.push(1)
console.log(arr)    [1]
----------------------------
const arr = []
arr = [2]
console.log(arr)         // 报错 Identifier 'arr' has already been declared
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值