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

好了,差不多就这些啦

1.文章有很多不足,如果哪里写的不对欢迎指正
2.您的支持就是对我最大的鼓励

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41673550/article/details/82971373