var 相当于在整个函数中添加了全局变量,容易污染全局作用域,因此在实际运用中很少使用let
let与块级作用域
let 声明变量形式的特点:
- let声明的变量只在当前作用域有效
- let声明的变量不能被重复声明
- 不存在变量的提升(不能先使用再声明)
- 使用let或者const声明的变量不能被重新声明或赋值
- 存在暂存死区,查找变量时只在当前作用域查找
作用域相关:
ES6之前的作用域有:全局作用域、函数作用域、eval作用域
现在常见的主要有:
块级作用域:简单的来说就是{...}
如:if(){}
块级作用域可以嵌套
如:if(){
if(){}
}
注意:声明对象或者对象字面量的时候的{}不算做块级作用域,如var obj = { a:0 }
const
- 用于声明常量,声明的同时必须赋值
- let存在的特点con都有(不能重复声明、不存在变量提升、只在当前(块级)作用域内有效)
- 当常量为引用类型的时候,可以被修改,如对象、数组
如声明一个const类型的常量作为一个对象,对象内的值可以被修改,但是无法再被声明成新的对象
const xiaoming = {
age: 14,
name: '小明'
};
console.log(xiaoming);
xiaoming.age = 22;
console.log(xiaoming);
xiaoming = {};//报错
怎么防止常量为引用类型的时候能被修改的情况?
在定义好的const后使用Object.freeze()方法
const xiaoming = {
age: 14,
name: '小明'
};
Object.freeze(xiaoming);
网友评论