ES6入门之------let 和 const
一. let
1. let只作用在当前块级作用域内
我们首先来看一下什么是块级作用域:
1.通俗来说就是一对花括号中的区域{…}
2.块级作用域可以嵌套
{
....
}
if(){
....
}
for(){
.....
}
...
还有很多这里不就不举例了,我们特别来说一个不是块级作用域的例子
这里的代表一个对象而不是一个块级作用域
var obj = { a:1 }
2.let只作用在当前块级作用域内
如果在块级作用域外访问就会报错,而var可以在正常访问
for (let i = 0; i < 3; i++) {
};
console.log(i);
for (var i = 0; i < 3; i++) {
console.log(i);
};
console.log(i);
3. 使用let或者const声明的变量,不能在被重新声明,var可以被重复声明。
var guard= '我是嘟嘟左卫门!';
console.log(guard);
var guard= '我才是嘟嘟左卫门!';
console.log(guard);
let guard= '我是嘟嘟左卫门';
let guard= '我才是嘟嘟左卫门';//报错
4. let不存在变量提升
变量提升
是执行上下文概念,在此不深入,有兴趣的小伙伴可以去了解一下。
声明一个变量前去使用一个变量。
console.log(guard);
var guard= '我是嘟嘟左卫门!';
console.log(guard);
let guard= '我是嘟嘟左卫门!';
5. 暂存死区
var monkey = '我是美猴王';
{
console.log(monkey);
var monkey = '我觉得我还能再抢救一下!';
}
console.log(monkey);
let monkey = '我是美猴王';
{
console.log(monkey);
let monkey = '我觉得我还能再抢救一下!';
}
console.log(monkey);
es6中规定如果块级作用域中存在let、const声明的变量就会形成一个封闭的作用域,也就是说就是向上的作用域中存在同名的变量,也是拿不到的。所以monkey拿不到作用域外面的值。
二、const
1.常量必须在声明的时候赋值
const a = 1;
2.常量声明后不能被修改:
const NAME = '小明';
NAME = '小红';//报错
3.常量为引用类型的时候 可以修改该引用类型
const xiaoming = {
age: 19,
name: '小明'
};
console.log(xiaoming);
xiaoming.age = 22;
console.log(xiaoming);
怎么防止常量为引用类型的时候能被修改的情况
Object.freeze()
以下是一些扩展的知识:
Object.defineProperty()
Object.seal()
obj.hasOwnProperty(i)