let,const配合具有的特性
供应了代码块级作用域;(代码块是用{}来完成的)
不存在变量提拔,先声明再运用;
存在“暂时性死区”;
不许可反复声明;
“暂时性死区”。
ES6明确划定,假如区块中存在let和const敕令,这个区块对这些敕令声明的变量,从一最先就形成了关闭作用域。通常在声明之前就运用这些变量,就会报错。
在代码块内,运用let或许const敕令声明变量之前,该变量是不可用的,这就是“暂时性死区”。只要在块级作用域内存在let敕令,它所声明的变量就“绑定”在这个地区,不再受外部的影响。
var tmp = 123;
if(true){
tmp = 'abc';//ReferenceError
let tmp;
}
在这个if的语句块内,tmp跟表面声明的tmp没有关系,所以这个时刻tmp相称因而一个新的变量。
“暂时性死区”意味着typeof不再是一个百分百的平安操作了
{
typeof x;//ReferenceError
let x;
}
不许可反复声明
let不许可在雷同作用域内,反复声明同一个变量。
//报错
function(){
let a = 10;
let a = 1;
}
const的注重点
const声明一个只读的常量,一旦声明,常量的值是不能转变的。然则const实际上保证的是变量指向的谁人内存地址不能修改,并非变量的值不能修改。
const foo = {};
//能够转变变量的值
foo.prop = 123;
foo = {};//报错
块级作用域与之前抵牾点(轻微晓得点就行)
块级作用域与函数声明
原本划定在块级作用域内,是不能有函数声明的。然则浏览器为了兼容之前的代码,所以是许可的。所以ES6在附录中划定,浏览器能够有本身的行动,以下的划定规矩只对ES6的浏览器完成有用,其他环境不必恪守
许可在块级作用域内声明函数
函数声明类似于var,即会提拔到全局作用域或许函数作用域的头部
函数声明照样会提拔到地点块级作用域的头部