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

标签:var,let,const
0
投稿

猜你喜欢

  • Python3网络爬虫中的requests高级用法详解

    2023-02-05 16:54:52
  • CSS实现HTML元素透明的那些事

    2010-02-01 12:34:00
  • python 3.10上如何安装pyqt5

    2022-04-09 23:59:53
  • 给Python的Django框架下搭建的BLOG添加RSS功能的教程

    2021-09-03 00:27:15
  • python如何获取文件当前位置和定位某个位置

    2022-01-10 17:40:36
  • 关于adfuller函数返回值的参数说明与记录

    2023-03-07 13:33:14
  • 简单了解添加mysql索引的3条原则

    2024-01-17 04:54:42
  • python并发编程多进程 模拟抢票实现过程

    2022-03-07 11:53:05
  • python扩展库numpy入门教程

    2022-05-05 14:28:05
  • Python自动化操作实现图例绘制

    2021-03-07 11:24:40
  • 浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式

    2023-11-25 12:41:38
  • 对python中的iter()函数与next()函数详解

    2022-01-29 19:05:36
  • javascript实现文本框标签验证的实例代码

    2024-04-25 13:07:41
  • JS判断鼠标从什么方向进入一个容器实例说明

    2024-04-28 09:48:35
  • Node.js系列之连接DB的方法(3)

    2024-05-03 15:55:26
  • css基础教程布局篇之一

    2008-07-31 17:21:00
  • 当设计师遭遇HTML5

    2011-08-05 18:59:53
  • 用python写个博客迁移工具

    2023-06-09 05:13:14
  • js验证表单(form)中的单选(radio)值

    2008-03-18 13:23:00
  • ASP 字符串转数字格式

    2009-08-19 17:18:00
  • asp之家 网络编程 m.aspxhome.com