ES6知识点总结(二)
let、const与作用域
ES6新增两个关键字let和const用于控制作用域
Let命令
基本用法
{
let a=10;
}
//Let声明的变量仅在其代码块内有效
for循环的计数器很适合使用let命令
for(let i=0;i<10;i++){
console.log(i); //0~9
}
console.log(i);
//Uncaught ReferenceError: i is not defined
at <anonymous>:4:13
for循环在设置循环变量的部分是一个父作用域,循环体内部又是一个独立的子作用域。
暂时性死区
区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域
在代码块内,使用let命令声明变量之前,该变量都是不可用的,这个区域被称为“暂时性死区TDZ”
var temp=123;
if(true){
temp='abc';
let temp;
}
注意:
不存在变量提升
不允许重复声明
以下三种调用均会报错
function fn(){
let a=10;
let a=1;
}
function fn(){
let a=10;
var a=1;
}
function fn(){
var a=10;
let a=1;
}
const命令
基本用法
声明一个只读的常量,其值不能改变且必须立即初始化。
const PI = 3.1415;
console.log(PI);
PI = 3; //报错 只读的
const circle; //报错,一旦声明,必须立即初始化。
与let相似:
const命令声明的常量也不提升,同样存在暂时性死区,只能在声明的位置后使用。
也不可以重复声明。
作用域
概念: 变量或函数在起作用的区域。
ES6的三种作用域:
全局作用域:浏览器窗口
函数作用域:在函数中声明的变量(包括函数参数)指定在其所声明的函数内被访问。
块作用域:由{ }界定的代码区域,let声明的变量具备可访问块作用域
• 允许块级作用域任意嵌套
• 内层作用域可以定义与外层作用域同名变量
• 块级作用域的出现使得ES5中惯用的IIFE(立即执行匿名函数)
作用域链
每一段JavaScript代码(全局代码或函数)都有一个与之关联的作用域链
当JavaScript查找变量x,会从当前作用域开始跟随作用域链向上查找,直到找到x变量的声明,若到达全局作用域中仍未找到,则抛出一个引用错误(ReferenceError)异常