天天看点

ES6学习笔记(一)一、let 命令 

一、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

会得到整个块级作用域的返回值。

继续阅读