一、let 命令
1、let命令
1.1基本用法
1.1.1 let用于声明变量
类似var,但是let声明的变量只在当前代码块内有效
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
let命令在for 循环的计数器中很实用。
1.1.2 let不存在变量提升
var命令会发送“变量提升”,即变量可以在声明之前使用,值为undefined 正常来说变量使用一定要在声明之后。
1.1.3 暂时性死区
只要块级作用域内存在let命令,它所生命的变量就绑定(binding)这个区域,不受外部影响。
ES6明确规定,在区块中存在let 和 const命令,这个区块对这些命令声明的变量都是 不能提前使用的,会报错。
总之在代码块之内,Let声明的变量不可提前使用。
1.1.4不允许重复声明
let不允许在相同作用域内重复声明同一个变量。所以不能在函数内部重新声明参数。
function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}
1.1.5 ES6的块级作用域
let为JavaScript新增了块级作用域,允许块级作用域的任意嵌套。
{{{{{let insane = 'Hello World'}}}}};
外层作用域无法读取内层作用域内的变量。
{{{{
{let insane = 'Hello World'}
console.log(insane); // 报错
}}}};
内层作用域可以定义外层作用域的同名变量。
{{{{
let insane = 'Hello World';
{let insane = 'Hello World'}
}}}};
1.1.6 允许块级作用域中声明函数
// 浏览器的 ES6 环境
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
// Uncaught TypeError: f is not a function
ES6的块级作用域允许声明函数的规则只在使用大括号的前提下成立,否则就会报错。
1.1.7 do表达式
块级作用域是一个语句,将多个操作封装在一起,没有返回值。
使得块级作用域可以变为表达式,也就是说可以返回值,办法就是在块级作用域之前加上
do
,使它变为
do
表达式。
let x = do {
let t = f();
t * t + 1;
};
上面代码中,变量
x
会得到整个块级作用域的返回值。