let、var、const之间的区别
let是es6的新语法,用来局部变量和 var类似但是 let只在代码块里有效,也就是块作用域
变量提升 是什么意思这里很多小伙伴会理解错
var a = 10;
func();
function func(){
console.log(a); //这里输出 undifined
var a = 10;
console.log(a); // a=0
}
很奇怪这里为什么是 undifined 这就是变量提升
上面的代码等价于
var的变量提升就是会先把var定义的变量提到代码最前进行声明,执行到指定指定代码再进行赋值
var a = 10;
func();
function func(){
var a ;
console.log(a); //这里输出 undifined
a = 10;
console.log(a); // a=0
}
并且要注意 {} 无法限制var
{
var a = 10;
}
console.log(a); //a=10
{
let b = 10;
}
console.log(b); //Uncaught ReferenceError: b is not defined
let 和 var区别有四点
1.let有暂时性死区(就是在声明变量前无法使用)
let没有变量提升
let不能重复声明
let有更小的作用域
-
声明全局变量
function varTest() { var a = 1; { var a = 2; // 函数块中,同一个变量 console.log(a); // 2 } console.log(a); // 2 } function letTest() { let a = 1; { let a = 2; // 代码块中,新的变量 console.log(a); // 2 } console.log(a); // 1 }
const和let的区别
相同点:
const 和let都是块级作用域
不同点:
let 声明的变量可以改变 const声明的变量不能改变(这里注意const是不可改变是指地址不可改变)
const 声明时必须赋值
cosnt a;报错 Uncaught SyntaxError: Missing initializer in const declaration
const obj = {
person:'zhangsan',
age:17
}
console.log(obj);
obj.age=20;
console.log(obj);
当const赋值对象的时候是可以进行修改的
const obj = {}
obj.test = '123';
console.log(obj); //{test:123}
const arr = [];
arr.push('test')
console.log(arr);// array(1)
obj = {}; //报错
arr= [''] //报错
//{test:123}
const arr = [];
arr.push('test')
console.log(arr);// array(1)
obj = {}; //报错
arr= [''] //报错