说说 ES6 的块级作用域
发布日期:2021-06-29 21:14:21
浏览次数:2
分类:技术文章
本文共 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 来模拟块级作用域。
转载地址:https://deniro.blog.csdn.net/article/details/98343774 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 07时34分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【H.264/AVC 句法和语义详解】(十):最简单的H264编解码器
2019-04-30
【H.264/AVC 句法和语义详解】(十一):Slice_Header的句法和语义
2019-04-30
【H.264/AVC 句法和语义详解】(十二):H264中的帧场编码模式详解
2019-04-30
【从零实现一个H.264码流解析器】(一):从码流中找到NALU
2019-04-30
PHP XML转数组
2019-04-30
PHP CURL请求
2019-04-30
关于那些加密解密的PHP方法--Star.hou
2019-04-30
elasticsearch PHP安装、使用
2019-04-30
Laravel命令行创建控制器、模型、脚本
2019-04-30
Python&NotePad++开发环境
2019-04-30
Paypal Webhook API创建
2019-04-30
laravel之中间件三步走--star.hou
2019-04-30
PHP Windows环境安装Solr扩展
2019-04-30
Paypal Express Checkout快速结账API心得--Star.Hou
2019-04-30
支付网关设计感悟(一)Star.Hou
2019-04-30
支付网关设计感悟(二)Star.Hou
2019-04-30
laravel文件上传excel - star.Hou
2019-04-30
Mysql复制数据库--star.Hou
2019-04-30
Js关于光标对象与定位插入图片
2019-04-30