美文网首页
ECMAScript6学习笔记-D2 块级作用域

ECMAScript6学习笔记-D2 块级作用域

作者: LabRaDor2079 | 来源:发表于2017-08-14 22:38 被阅读0次

let实际上为 JavaScript 新增了块级作用域
用let命令声明的变量,外层代码块不受内层代码块的影响:

function f1() { let n = 5; var m = 5; if (true) { let n = 5; var m = 10; } console.log(n); // 5 console.log(m); // 10}f1();

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 = 3; console.log(tmp);}());// 块级作用域写法{ let tmp = 5; console.log(tmp);}

块级作用域与函数声明
ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。

// 情况一if (true) { function f() {}}// 情况二try { function f() {}} catch(e) { // ...}//上面两种函数声明,根据 ES5 的规定都是非法的。但是,浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持在块级作用域之中声明函数,因此上面两种情况实际都能运行,不会报错

ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。函数本身的作用域,在其所在的块级作用域之内:

function f(){ console.log('I am outside!'); }f();(function (){ if(false){ //重复声明一次函数f function f(){ console.log('I am inside!'); } } f();}());

上面代码在ES5中运行,会得到“I am inside!”,但是在ES6中运行,会得到“I am outside!”。这是因为ES5存在函数提升,不管会不会进入if代码块,函数声明都会提升到当前作用域的顶部,得到执行;而ES6支持块级作用域,不管会不会进入if代码块,其内部声明的函数皆不会影响到作用域的外部

**注意:**如果在严格模式下,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错

相关文章

  • ECMAScript6学习笔记-D2 块级作用域

    let实际上为 JavaScript 新增了块级作用域用let命令声明的变量,外层代码块不受内层代码块的影响: E...

  • ECMAScript6学习笔记-D2 块级作用域

    let实际上为 JavaScript 新增了块级作用域 用let命令声明的变量,外层代码块不受内层代码块的影响: ...

  • es6学习笔记

    《ECMAScript6 入门》阮一峰 读书笔记 let和constlet声明的变量仅在块级作用域内有效,var声...

  • 《深入理解ES6》学习笔记(第三天)

    《深入理解ES6》学习笔记(第三天) 第一章 块级作用域绑定 第2节 块级声明块级声明用于声明在指定块的作用域之外...

  • js 作用域

    js 作用域主要有:全局作用域和局部作用域,es5之前没有块级作用域,es6有了块级作用域 何为块级作用域,块级作...

  • let、const和var的区别(个人笔记)

    1. 区别 (1)块级作用域块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作...

  • let,var和const

    var没有块级作用域,只有方法作用域常见的块级作用域,if(){}。for(){}。

  • 第七章 块级作用域、私有变量

    模仿块级作用域 私有变量  js没有块级作用域,只有全局作用域和局部作用域(函数作用域),块级作用域是指某一部分代...

  • 你真的懂let和const吗?

    块级作用域 在ES6之前我们脑海里应该只存在全局作用域和函数级作用域,没有块级作用域。那么为什么要引入块级作用域呢...

  • js高级知识点(第五天)

    所用域 什么是作用域 变量起作用的范围 什么是块级作用域,使用代码块限定的作用域是块级作用域(let声明的变量是块...

网友评论

      本文标题:ECMAScript6学习笔记-D2 块级作用域

      本文链接:https://www.haomeiwen.com/subject/yamprxtx.html