5分钟快速掌握JS中var、let和const的异同
作者:葡萄城官网 发布时间:2024-05-09 15:05:49
前言
首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?
ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。
2011 年,ECMAScript 5.1 版发布。之前我们大部分人用的也就是ES5
2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。
好了,回归我们的正题。
本文说的这个话题对于一些老鸟来说可能根本算不上疑问,但对于新手来说也许除了最常见的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中声明变量时使用不同关键字上到底有何异同。
来源:https://dzone.com/articles/javascript-difference-between-var-let-and-const-ke


猜你喜欢
- 本文以实例形式实现了python监控linux性能以及进程消耗性能的方法,具体实现代码如下:# -*- coding: utf-8 -*-&
- 做设计的时候,如何配色是经常让人头痛的问题,尽管很多时候,很多人都说对于色彩的掌握更多的是靠感觉,但是不得不说,感觉也是要有依据的。所以颜色
- 笔主在做一个项目要生成一组随机有序的整型数字,并按行输出到文本文件使用,恰好开始学习Python3,遂决定直接使用Python3解决思路:与
- 在图像处理中,直方图是非常重要,也是非常有用的一个处理要素。在skimage库中对直方图的处理,是放在exposure这个模块中。1、计算直
- 总说由于pytorch 0.4版本更新实在太大了, 以前版本的代码必须有一定程度的更新. 主要的更新在于 Variable和Tensor的合
- 如图输入如下命令python manage.py startapp apitest添加应用到 autotest项目项目下在settings.
- 1、注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错2、多进程内出现错误会直接
- 前言:java语言读写.doc的出现乱码问题:大家都知道当我们利用java语言读写.doc文件时,无论是利用流的方式将.doc文件的内容输出
- logging分为4个模块: loggers, handlers, filters, and formatters.●loggers: 提供
- 前言索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么讲,随着业务数据量的不断增长,优化系统的响应速
- 用Python+ChatGPT批量生成论文概述做算法研究离不开阅读大量论文。从海量论文中找到需要的论文往往耗费算法团队不少的精力。ChatG
- 文章目录 微信登录问题Python chrome driver操作导入库并声明浏览器:完整流程:用js来预约生成js代码 主函数——程序出错
- 一、背景起源于一个问题:怎样找到字符串中出现次数最多的字符其实使用max函数就能很轻松的解决这个问题:代码:str1 = "AAA
- 什么是浮动?浮动是 css 的定位属性。我们可以看一下印刷设计来了解它的起源和作用。印刷布局中,文本可以按照需要围绕图片。一般把这种方式称为
- 图像有时候比数据更能满足人们的视觉需求Pytorch中保存图片的方式pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,
- 1、简介MySQL是关系型数据库,我们在使用的时候往往会将对象的属性映射成列存储在表中,因此查询的到的结果在不做任何处理的情况下,也是一个个
- 前言之前提交的github copilot技术预览版申请,今天收到准入邮件,于是安上试一试这个准备把我送去电子厂上班的copy a lot
- 在处理数据时,经常需要对数据分组计算均值或者计数,在Microsoft Excel中,可以通过透视表轻易实现简单的分组运算。而对于更加复杂的
- # -*- coding: UTF-8 -*-from __future__ import unicode_literalsimport I
- python中获取字典的key列表和value列表 # -*- coding: utf-8 -*-# 定义一个字典dic = {'剧