ES6进修笔记:let的运用

块级作用域

for(var i = 0; i < 10; i++){}
console.log(i); //10

for(let j = 0; j < 10; j++){}
console.log(j); //"ReferenceError: j is not defined

疑问: https://segmentfault.com/q/1010000004643248

不存在变量提拔

console.log(a); // 输出undefined
console.log(b); // 报错ReferenceError
console.log(c); // 报错ReferenceError
var a = 2;
let b = 2;

注重区分undefinedReferenceError

暂时性死区(TDZ)

只需进入当前块级作用域,所运用的变量已存在了,但在声明之前都属于死区,不可举行操纵。

注重: typeof不再是100%平安的操纵

typeof x; // ReferenceError
typeof y  // undefined
let x;

不允许反复声明

let x = 1;
let x; // "SyntaxError: Identifier 'x' has already been declared

var y = 2;
var y = 3; // y = 3

块级作用域

// 匿名函数写法
(function () {
  var tmp = ...;
  ...
}());

// 块级作用域写法
{
  let tmp = ...;
  ...
}

ES5的严厉形式划定,函数只能在顶层作用域和函数内声明,其他状况(比方if代码块、轮回代码块)的声明都邑报错。

// ES5
'use strict';
if (true) {
  function f() {} // 报错
}

ES6因为引入了块级作用域,这类状况能够明白成函数在块级作用域内声明,因而不报错,然则组成区块的大括号不能少

// 报错
'use strict';
if (true)
  function f() {}

声明的全局变量不再是window的属性

"use strict";
var a = 1;
console.log(window.a) // 1

let b = 1;
console.log(window.b) // undefined
    原文作者:云贤力
    原文地址: https://segmentfault.com/a/1190000004679743
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞