在ES5作用域分为全局作用域和函数作用域,但是在ES6中作用域还增加了块级作用域。而const和let就是块级作用域。
那什么是块级作用域呢?
可以说是在一个函数内部或者是说在一个代码块内部。
其实说白了就是 {}大括号内的代码块即为let 和 const的作用域。
下面举一些小的列子:
1.let
let在块级作用域有效,在该块级作用域之外将不能被访问。
let str = '123';
console.log(str);//123
function fun() {
let str = '456';
console.log(str);//456
}
fun();
console.log(str);//123
let声明的变量不能重复声明,不然会报错
//会报错
function fun() {
let a = 10;
let a = 1;
}
2.const
const用于声明常量,在程序运行中不能直接被修改,不然会报错。但是let可以更改
let a = 10;
a = 1;
console.log(a);//1
const a = 10;
a = 3;//会报错
const 常量必须在声明的同时指定它的值,不然会报错。
const a;//报错
const作用域和let一样都是块级作用域。
const a = 10;
function fun() {
const a = 5;
}
fun();
console.log(a);//10
let,const 和var的一些区别:
1.let和const都不能重复声明,不然会报错,而var重复声明会覆盖。
function fun() {
let a = 10;
let a = 1;//报错
}
function fun() {
const a = 10;
const a = 1;//报错
}
function fun() {
var a = 10;
var a = 1;
console.log(a);//1
}
2.let和const的作用域是在它所在当前代码块,不会被提升到当前函数的最顶部而var会被提升到当前函数的最顶部。
function fun() {
console.log(str);//报错
let str = '456';
}
fun();
function fun() {
console.log(str);//undefined
var str = '456';
}
fun();