ES6允许块级作用域的任意嵌套
来源:互联网 发布:淘宝福利晒图店家 编辑:程序博客网 时间:2024/05/22 16:57
ES6允许块级作用域的任意嵌套。
{{{{{let insane = 'Hello World'}}}}};
上面代码使用了一个五层的块级作用域。外层作用域无法读取内层作用域的变量。
{{{{ {let insane = 'Hello World'} console.log(insane); // 报错}}}};
内层作用域可以定义外层作用域的同名变量。
{{{{ let insane = 'Hello World'; {let insane = 'Hello World'}}}}};
块级作用域的出现,实际上使得获得广泛应用的立即执行匿名函数(IIFE)不再必要了。
// IIFE写法
(function () { var tmp = ...; ...}());
// 块级作用域写法
{ let tmp = ...; ...}
另外,ES6也规定,函数本身的作用域,在其所在的块级作用域之内。
function f() { console.log('I am outside!'); }(function () { if(false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f();}());
上面代码在ES5中运行,会得到“I am inside!”,但是在ES6中运行,会得到“I am outside!”。这是因为ES5存在函数提升,不管会不会进入 if代码块,函数声明都会提升到当前作用域的顶部,得到执行;而ES6支持块级作用域,不管会不会进入if代码块,其内部声明的函数皆不会影响到作用域的外部。
{ let a = 'secret'; function f() { return a; }}f(); // 报错
上面代码中,块级作用域外部,无法调用块级作用域内部定义的函数。如果确实需要调用,就要像下面这样处理。
let f;{ let a = 'secret'; f = function () { return a; };}f(); // "secret"
ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。
// ES5'use strict';if (true) { function f() {} // 报错}
ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少,否则还是会报错。
// 不报错'use strict';if (true) { function f() {}}
// 报错'use strict';if (true) function f() {}
另外,这样声明的函数,在区块外是不可用的。
'use strict';if (true) { function f() {}}f(); // ReferenceError: f is not defined
上面代码中,函数f是在块级作用域内部声明的,外部是不可用的。
0 0
- ES6允许块级作用域的任意嵌套
- ES6的块级作用域--读书笔记
- Es6入门之块级作用域
- ES6之块级作用域
- ES6中的块级作用域
- ES6之块级作用域
- 浅谈ES6 块级作用域
- ES6之块级作用域分析
- 4.ES6块级作用域
- 理解ES6: 块作用域
- ES6块级作用域及新变量声明(let)
- ES6入门(一):块级作用域
- ES6——Day1(块级作用域)
- ES6初探-let与块级作用域
- ES6之块级作用域与函数声明--读书笔记
- 深入理解ES6--块级作用域(let const)
- ES6之let、const和块级作用域
- 3.ES6为什么需要块级作用域
- shell的 关联数组 和 普通数组
- Android手柄焦点控制
- 2d游戏循环滚动地图中的拼接缝隙问题
- JavaAPI之AtomicBoolean
- bzoj4538【HNOI2016】网络
- ES6允许块级作用域的任意嵌套
- AngularJS 风谲云诡的指令
- arm驱动linux异步通知与异步IO
- 各大json的使用
- 十分钟探讨map与hashmap的排序
- MySQL与NULL值有关的问题
- Div+CSS 规则整理 以及注意问题
- 中国未来十年可能因战争而惨不忍睹
- 游程编码与哈弗曼编码结合的压缩解压(c语言)