浅谈ECMAScript6新特性之let、const
发布时间 - 2026-01-11 02:36:12 点击率:次第一次写博客有点紧张,如果说的不对的地方,欢迎大家留言指正。咱们先来说说“ECMAScript”这到底是啥玩意儿?它和javascript的关系又是如何的?首先,在1996年11月的时候,javascript的创造者(网景公司Netscape)和sun公司联合ECMA(欧洲计算机制造商协会)对javascript进行标准化,次年,ECMA发布262号标准文件文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准(在这里提个问题:为什么要标准化?),并将这种语言称为ECMAScript,这个版本就是1.0版的。这个标准一开始就是针对与javascript来制定的,但是没有称之为“javascript”,这其中有两个原因,一是:商标;二是:想体现这门语言的规格制定者是ECMA,这样有利于保证开发性和中立性。所以,ECMAScript和javascript之间的关系就是,前者来制定规格,后者来实现(另外的ECMAScript的实现还有JScript和ActionScript)。一般的情况下,这两个词是可以互换的。

接下来来介绍一下es6中的新特性之“let”。首先,这个玩意儿其实和var这个命令类似,都是用于声明变量的,但是所声明的变量只在let命令所在的代码块内有效(这里涉及到块级作用域的概念,然而这个概念也是es6中提出来的。在后面我再来讲。PS:在其他编程语言中,早就有块级了)
上面的两张图就反映出了let所声明的变量只在let命令所在的代码块内有效。下面来举个例子:
发现区别了吗?var声明的变量它是全局范围内都有效的,每一次的循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i值(当然,也可以利用闭包来解决这个问题【第三张图】)。如果使用的是let,声明的变量仅在块级作用域内有效,当前的i只在本轮循环有效,所以每一次循环i其实都是一个新的变量。在期间我发现了一个更神奇的东西,请看下面一张图:
注意:①、let不像var一样会发生“变量提升”的现象,所以,使用之前,必须先声明,不然就会报错。
②、暂时性死区(temporal dead zone,简称TDZ),只要块级作用域内有let命令,它所声明的变量就会绑定这个区域,不收外部的的影响。简单的来说,在代码块中,使用let命令声明变量之前,变量都是不能用的。例子:
③、let不允许在同一个作用域内重复声明同一个变量。
好了,现在再来讲一讲上文提及到的一个东东:“块级作用域”。在es5中只有“全局作用域”和“函数作用域”。这使得我在刚开始学的时候一脸蒙蔽,其他语言都有块级作用域(比如C语言),但js就没有。幸好在es6中加入了“块级作用域”的概念,let实际上为javascript新增了块级作用域,有了块级作用域,就可以避免变量泄露*局变量,代码快之间不会受到影响。另外,es6里还规定了:函数本身的作用域在其块级作用域内。注意!注意!注意!重要的事说三遍:(如果是在严格模式下,函数只能在顶级作用域和函数内部声明,其他情况下【比如:if语句、循环语句下】就会报错) :
最后再来说说es6中的新特性之“const”,好吧,其他编程语言里早就有了,但是javascript在es6之前还是没有~~。这个是用来声明常量的,其表现为不可修改的,还有就是声明的同时必须进行赋值,否则就会报错。
注意:①、在作用域方面,它其实和let作用域相同:只在声明所在的块级作用域内有效;
②、const命令声明的常量同样不存在“变量提升”,同样存在“暂时性死区”,必须在声明后才能使用。
③、const也不能重复声明常量。
综合例子:
④、对于复合类型的变量,常量名不指向数据,而是指向的是数据的指针地址,const命令只是保证了地址没有变,但并不保证数据的不变,所以在使用const命令声明常量为对象时要小心!!其实我们可以对其对象进行“冻结”,使用Object.freeze()即可实现。
以上这篇浅谈ECMAScript6新特性之let、const就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# es6
# let
# const
# ES6新特性一: let和const命令详解
# 深入浅出ES6之let和const命令
# JavaScript ES6中const、let与var的对比详解
# ES6入门教程之let和const命令详解
# 就会
# 的是
# 都是
# 只在
# 报错
# 新特性
# 给大家
# 再来
# 网景
# 编程语言
# 情况下
# 内有效
# 是在
# 都有
# 在这里
# 我在
# 好了
# 出了
# 又是
# 一是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
七夕网站制作视频,七夕大促活动怎么报名?
焦点电影公司作品,电影焦点结局是什么?
如何构建满足综合性能需求的优质建站方案?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
网易LOFTER官网链接 老福特网页版登录地址
如何用AI帮你把自己的生活经历写成一个有趣的故事?
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel如何实现模型的全局作用域?(Global Scope示例)
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
JavaScript数据类型有哪些_如何准确判断一个变量的类型
高端企业智能建站程序:SEO优化与响应式模板定制开发
利用python获取某年中每个月的第一天和最后一天
开心动漫网站制作软件下载,十分开心动画为何停播?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何在万网自助建站平台快速创建网站?
如何生成腾讯云建站专用兑换码?
黑客入侵网站服务器的常见手法有哪些?
Laravel如何使用Sanctum进行API认证?(SPA实战)
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
如何在宝塔面板中创建新站点?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
利用JavaScript实现拖拽改变元素大小
如何快速上传建站程序避免常见错误?
详解Android中Activity的四大启动模式实验简述
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
如何在宝塔面板创建新站点?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
详解CentOS6.5 安装 MySQL5.1.71的方法
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
高防服务器租用指南:配置选择与快速部署攻略
如何挑选优质建站一级代理提升网站排名?
EditPlus中的正则表达式实战(6)
如何在云主机快速搭建网站站点?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何为不同团队 ID 动态生成多个非值班状态按钮
成都网站制作公司哪家好,四川省职工服务网是做什么用?
活动邀请函制作网站有哪些,活动邀请函文案?
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel distinct去重查询_Laravel Eloquent去重方法
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
如何在橙子建站上传落地页?操作指南详解

