博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说 ES6 的块级作用域
阅读量:1904 次
发布时间:2019-04-26

本文共 924 字,大约阅读时间需要 3 分钟。

1 问题

先说说没有块级作用域,可能产生的问题。

1.1 内层变量覆盖外层变量

var temp=1;function f(){    console.log(temp);    if(false){        var temp='字符串变量';    }}f()

运行结果:

undefined

因为变量提升,导致 if 语句体中的变量 temp 覆盖了外层变量 temp。

1.2 用于循环的计数变量,其实是全局变量

var s = 'es6';for (var i = 0; i < s.length; i++) {    s[i];}console.log('i=' + i);

运行结果:

i=3

2 块级作用域

ES6 通过 let 来实现块级作用域。

function f1() {    let i = 1;    if (true) {        let i = 11;    }    console.log(i);}f1();

运行结果:

1

外层的变量 i,不受内层变量 i 的影响。

使用 {...} 结构,就可以标注出一个块级作用域。如果一个变量在外层没有定义,那么就会抛出 ReferenceError: xxx is not defined 错误。请看下例:

{    {        let str = '你好'    }    console.log(str);}

运行结果:

console.log(str);

^
ReferenceError: str is not defined

内层作用域可以定义与外层作用域同名的变量,而不相互影响:

{    let str='你好';    {        let str = '你好吗';        console.log('内层:'+str);    }    console.log('外层:'+str);}

运行结果:

内层:你好吗

外层:你好

有了块级作用域,我们就不需要 IIFE(立即调用函数表达式)啦!IIFE 是一个在定义时就会立即执行的 JavaScript 函数。以前没有块级作用域,我们都是使用 IIFE 来模拟块级作用域。

转载地址:http://efccf.baihongyu.com/

你可能感兴趣的文章
java各种锁
查看>>
清晰理解红黑树的演变
查看>>
红黑树插入删除
查看>>
红黑树代码
查看>>
cmd
查看>>
redis安装
查看>>
Mysql常见的存储引擎及比较
查看>>
android Context家族及详解
查看>>
android CrashHandler处理异常
查看>>
android 问题小记
查看>>
android productFlavors多马甲打包
查看>>
android 搭建本地maven库
查看>>
android mac搭建Nexus3.+私有maven
查看>>
android RecyclerView实现柱状图
查看>>
OPPO崩溃问题解决
查看>>
Glide4.0+使用
查看>>
Glide遇到的问题与解决方法
查看>>
记ViewStub的一个问题
查看>>
okhttp实现连接池原理
查看>>
android LeakCanary原理解析
查看>>