var,let,const区别

171 阅读1分钟

变量提升

编译阶段 => 编译器进行词法解析生成AST语法树给浏览器引擎去运行

1.变量提升
在当前执行上下文代码执行之前,首先会把所有带var和function关键字的声明或者定义(带var只是提前声明,带function会提前声明+定义)

fn()
function fn(){
	console.log(1)
}
fn()
function fn(){
	console.log(2)
}
fn()
var fn = function(){
	console.log(3)
}
fn()
function fn(){
	console.log(4)
}
fn()
function fn(){
	console.log(5)
}
fn()
// 555333

2.var声明给全局添加属性
var:全局变量对象中声明的变量用var声明的,也会给全局对象GO中增加一个对应的属性,但是用let声明的变量则不存在这个特点

var x = 10
console.log(window.x) //10
let y = 20
console.log(window.y) // undefined

3.let不能重复声明过不了编译器词法解析
var可以重复声明(词法解析阶段是可以审核过的),执行阶段遇到已经声明过,不会再重新声明;但是let是不可以的,词法解析阶段都过不去,也就不存在引擎去执行代码阶段了

console.log('ok')
let a = 10
console.log(10)
let a = 20
console.log(20)
// Uncaught SyntaxError: Identifier 'a' has already been declared

4.let存在块级作用域

let 创建的变量可以更改他的指针指向(重新赋值)
const 创建的变量不能改变指针指向