资讯专栏INFORMATION COLUMN

ES6学习笔记:let的使用

Lin_YT / 3203人阅读

摘要:注意不再是安全的操作不允许重复声明块级作用域匿名函数写法块级作用域写法的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况比如代码块循环代码块的声明都会报错。

块级作用域
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://www.ucloud.cn/yun/79008.html

相关文章

  • ES6学习笔记之模块

    摘要:但是一直没有在语言层面支持模块,直到的出现。相信在不久的将来,的模块一定会全面取代和。的模块提供了个新的语法,分别是和。就是模块用来对外暴露数据的接口,具体用法如下。 本文同步自我得博客:http://www.joeray61.com 简介 在当今的Javascript程序中,模块的作用不言而喻,目前广泛应用的主要有AMD(浏览器端)和CommonJS(服务器端)。但是Javascri...

    Airmusic 评论0 收藏0
  • 珠峰培训ES6学习笔记1

    摘要:消除字符串头部空格消除尾部空格从头部补全字符串从尾部补全字符串 let和const var关键字定义变量的特点: 可以重复定义 不能定义常量 不支持块级作用域 let的特点 不可以重复定义 变量不能提升,在变量定义之前,不能使用 在大括号当中定义的变量(块级作用域中),在作用域外无法访问 解决一些ES5当中需要闭包实现的功能,比如:每隔1秒循环输出一个当前的值 const的特点...

    番茄西红柿 评论0 收藏0
  • ES6学习笔记一:let、const、块级作用域

    摘要:一新增了命令和一样都是用来声明标量,但所声明的变量只在声明的代码块内及声明之后有效命令适合在循环中使用在循环内有效在全局内有效命令暂时性死区大括号中的使用了声明,所以在大括号中暂时只能在声明之后有效不允许在同一作用域内重复声明变量,因此不能 一、ES6新增了let命令 let 和 var 一样都是用来声明标量,但let所声明的变量只在【声明的代码块内】及【声明之后】有效 { c...

    YuboonaZhang 评论0 收藏0
  • ES6 学习笔记(一)let,const和解构赋值

    摘要:另外对于已经声明的变量进行解构赋值时,要非常小心。因此在行首加,将其强制转化为表达式执行。由于和无法转为对象,所以对它们进行解构赋值,都会报错。 let和const let和const是es6新增的两个变量声明关键字,与var的不同点在于: (1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效。var为函数作用域。 (2)使用let和con...

    iOS122 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<