5分钟掌握var,let和const异同
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
原文出处:https://dzone.com/articles/javascript-difference-between-var-let-and-const-ke
这个话题对于一些老鸟来说可能根本算不上疑问,但对于新手来说也许除了最常见的var之外,let和const较少使用的机会。
所以在本文中,我将会通过一些例子来为大家介绍如何在Javascript中灵活使用var、let和const这些关键字来定义变量,以及这些关键字它们之间有什么异同。
如果你懒得看下面的代码,那我可以先把概念结论说出:
- var定义的变量可被更改,如果不初始化而直接使用也不会报错
- let定义的变量和var类似,但作用域在当前声明的范围内
- const定义的变量只可初始化一次且作用域内不可被更改,使用前必须初始化
下面我将通过示例的形式来详细为大家介绍它们三者之间的异同:
Var
var用以声明一个变量,并且同时我们可以在声明语句中初始化所声明的变量。
例如:
var a = 10;
- 变量的声明,会在代码被执行之前被处理。
- 用
var声明的JavaScript变量,其可用范围在当前执行上下文。 - 在函数外声明的JavaScript变量,其作用范围是全局。
考虑以下代码片段:
function nodeSimplified() {
var a =10;
console.log(a); // 输出 10
if(true) {
var a=20;
console.log(a); // 输出 20
}
console.log(a); // 输出 20
}
在上面的代码中,你可以发现,当变量a在if代码段里被更新时,它的值被全局更新了,因此在经过了if代码后,被更新的值仍然被保留着。这与其他语言中的全局变量有点类似。但是,在使用这个功能时要非常小心,因为它有可能会覆盖一个已有的值。
let
let语句在一个块级范围里声明一个局部变量。和var类似,我们可以在声明时初始化它的值。
例如:
let a = 10;
- 这个语句允许你创建一个变量,使它的作用范围被限制在它所在的代码块。
- 它和Java、C#等其他语言的变量类似。
考虑下面的代码片段:
function nodeSimplified() {
let a =10;
console.log(a); // output 10
if(true) {
let a=20;
console.log(a); // output 20
}
console.log(a); // output 10
}
它和大多数语言中我们所见的表现行为是一致的。
function nodeSimplified() {
let a =10;
let a =20; // 抛出语法错误
console.log(a);
}
错误信息:"未捕获的异常:标识符'a'已经被声明过。" 但如果使用var就没事:
function nodeSimplified() {
var a =10;
var a =20;
console.log(a); // 输出 20
}
使用let语句,可以很好的维护变量的作用范围。当使用内部函数时,let语句让你的代码更整洁。
我希望上面的例子能帮你更好地理解var和 let。如果有任何疑问,请在评论区留言。
const
const语言中的变量只能被赋值一次,然后就不能在被赋值。const语句的作用范围和let语句一样。
例如:
const a = 10;
function nodeSimplified() {
const MY_VARIABLE =10;
console.log(MY_VARIABLE); // 输出 10
}
照例,命名规范指出我们应该用大写字母声明常量。当然,const a = 10 在上面的代码中会的起到相同的作用。为了让代码长期可维护,命名规范还是值得遵守的。
问题:如果给一个const变量重新赋值会发生什么? 考虑下面的代码:
function nodeSimplified() {
const MY_VARIABLE =10;
console.log(MY_VARIABLE); // 输出 10
MY_VARIABLE =20; // 抛出类型错误
console.log(MY_VARIABLE);
}
错误信息:"未捕获的类型错误:给const变量赋值"。
当我们尝试给已有的const变量赋值时,这段代码会抛出一个错误。
介绍就到此结束,希望这篇短小精悍的文章能够帮助到各位更好的理解在Javascript中声明变量时使用不同关键字上到底有何异同。
5分钟掌握var,let和const异同的更多相关文章
- var和let/const的区别
let和const是 ES6 新增的命令,用于声明变量,这两个命令跟 ES5 的var有许多不同,并且let和const也有一些细微的不同,再认真阅读了阮一峰老师的文档后,发现还是有一些不知道的细节. ...
- var let Hositing const Temporal Dead Zone
var let Hositing const Temporal Dead Zone 临时死区
- (译文)学习ES6非常棒的特性-深入研究var, let and const
Var var firstVar; //firstVar被声明,它的默认值是undefined var secondVar = 2; //secondVar被声明,被赋值2 先看一个例子: var i ...
- es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)
var命令和function命令声明的全局变量,依旧是顶层对象的属性:let命令.const命令.class命令声明的全局变量,不属于顶层对象的属性.也就是说,从 ES6 开始,全局变量将逐步与顶层对 ...
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- var let及const
es6已经发布很久了,之前只会用var定义变量,学习了let和const后,又学到了一些作用域.JavaScript编译和深拷贝浅拷贝的知识.这章主要来说说这三个定义量的方法: 1.var 在没学习e ...
- JS中 var,let与const的区别
1.在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . cons ...
- 第一百零六篇:变量的不同声明(var,let和const的不同)
好家伙,JS基础接着学, 本篇内容为<JS高级程序设计>第三章学习笔记 1.变量 ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据. (确实松散,不像C或C++ ...
- var 和 let 的异同?
相同点 声明后未赋值表现一致 不同点 1.使用未声明的变量表现不同 2.变量作用范围不同 3.var可以声明多次 let只能声明一次 let的好处就是当我们在写代码的时候可以避免在不知道的情况下重复声 ...
随机推荐
- 【java线程】的wait、sleep、join、yied
1.概述 使用Thread相对来说比较简单,没有什么成本,但是通常来说,我们使用线程基本就是覆写run方法,然后调用线程对象的start函数启动线程. 对于面试人员来说,这些都不是面试官会问到的问题, ...
- Spring+SpringMVC+MyBatis的pom.xml依赖
<!-- 集中定义依赖版本号 --> <!-- 已经依据maven仓库给出的版本兼容信息,调节好合适的spring.mybatis-spring.mybatis.pagehelper ...
- Netty源码—三、select
NioEventLoop功能 前面channel已经准备好了,可以接收来自客户端的请求了,NioEventLoop作为一个线程池,只有一个线程,但是有一个queue存储了待执行的task,由于只有一个 ...
- Linux iptables 配置规则
Linux iptables 防火墙配置规则 前言:把网上我感觉不错iptables的访问规则都统一在这里,以后做参考. modprobe ipt_MASQUERADE modprobe ip_con ...
- vue 中使用promise
init1(){return new Promise((resolve, reject) => { let data={ dateStr:this.time }; api.get('url', ...
- openlayers4 入门开发系列之地图属性查询篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- git使用笔记1:结合Github远程仓库管理项目
git是一个十分好用的版本控制工具,我们经常在本地使用git进行项目开发,Git 并不像 SVN 那样有个中心服务器,如果想要通过 Git 分享你的代码或者与其他开发人员合作,就需要将数据放到一台其他 ...
- 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
delete from Resource where Title in (select Title from Resource group by Title having count(Title) & ...
- NLP第八条
今日!我虽啥也没干,但我还是有着学习的心的~ 也许是“遵义会议”呢 那也说不定 留下这句话再说 哈哈哈哈哈哈 只能抄抄NLP第八条了 谁叫我选了个灰常有意义的通识课咧 八,每一 ...
- 初识Djiango
老师的博客:点我 内容主要是看老师的博客 下面是自己的写的某些自己当时不太懂的. 关于Django的版本的问题 Django官网下载页面 在官网上显示lts的是表示支持长期版本.所以最好下载1.11版 ...