返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript变量中var,let和const的区别
  • 889
分享到

JavaScript变量中var,let和const的区别

2024-04-02 19:04:59 889人浏览 泡泡鱼
摘要

目录前言ES5与es6的区别1. 作用域2. 全局属性3. 变量提升与暂时性死区4. 重复声明let与const的区别1. 常量最佳实践前言 javascript中一共有3种用来声明

前言

javascript中一共有3种用来声明变量的关键字,分别是var、let和const。

其中var关键字是ES5时代的产物,由于ES5对变量的约束很宽松,使用var来声明变量时经常会出现一些预料之外的问题。 ES6为了使变量的定义更加规范,提出了let和const这两个关键字。

因此要解释清楚这三个的区别,首先要从ES5时代和ES6时代的差别说起,主要是var和let的区别。

ES5与ES6的区别

1. 作用域

使用不同的关键字来声明变量,主要就是对变量的作用域有不同的限制,因此var和let最主要的区别就是变量作用域的区别。

  • var声明的范围是函数作用域,函数体之外无法访问到函数体内声明的var变量。

做题的时候经常会有在全局和函数体内声明同名变量的场景,要知道不同作用域的变量是不会互相干扰的。

var a = 10;
function logA() {
    var a = 20;
    console.log(a); // 20
}
console.log(a); // 10
  • let声明的范围是块作用域,块作用域是函数作用域的子集,可以使用花括号{...}来限定块级作用域。

2. 全局属性

在全局作用域下使用var和let声明变量,变量都是会在页面的声明周期内存续。

但是使用var声明的变量会成为window对象的属性,使用let声明则不会

3. 变量提升与暂时性死区

  • var声明存在变量提升的行为

变量的声明、初始化和赋值被分为三步进行,对于var变量,声明和初始化会被提升到作用域的顶部。

也就是说,编译器在遇到var声明时,会先在作用域顶部声明一个var变量并将其初始化为undefined值。

因此在代码执行流遇到var声明语句之前访问var变量并不会报错,而是会访问到undefined值。

(function example() {
  console.log(age); // undefined
  var age = 20;
})();

// 相当于
(function example() {
  var age;
  console.log(age); // undefined
  age = 20;
})();
  • ES6对先访问后声明变量的行为做了约束,因此let和const声明会存在TDZ暂时性死区

即JavaScript引擎在编译时如果遇到let和const声明,会将它们放入暂时性死区以阻止访问,只有在执行到变量声明的语句后,才会将变量从TDZ中移出。

因此如果在变量声明语句之前访问变量,相当于企图访问TDZ中的变量,JavaScript会抛出运行时错误ReferenceError

ES5的变量提升和ES6的暂时性死区的区别还有一个“副作用”就是改变了typeof操作对于变量的访问性。

已知在ES5时对于未声明变量唯一的安全操作是typeof,会返回undefined值。

TDZ的出现导致即使使用typeof,也不能在let和const声明语句执行之前访问let和const变量,依然会报ReferenceError

4. 重复声明

  • var声明是允许重复的,可以重复使用var关键字来声明同名变量,后来声明的变量值会覆盖之前的值。
  • 为了阻止重复声明变量这个容易让人迷惑的行为,ES6限制了let和const声明的变量都是不可重复的,如果重复声明会报SyntaxError错误。

这个限制不仅体现在let声明对let声明,如果想用let去重复声明var变量也是不被允许的。

let与const的区别

1. 常量

同样都是ES6的变量声明关键字,let和const的区别就在于使用const声明创建的是一个值的只读引用

只读引用意味着对于原始值来说,const声明不可以再重新赋值;

对于引用值来说,const声明不可以再修改引用,但是可以修改对象的属性值或者数组内部的值。

最佳实践

  • 尽量不使用var。因为let和const已经可以替代var的位置,满足开发需求,顺便还规避了很多不必要的问题。
  • 优先使用const声明,let声明次之。const声明有点像保护变量的机制,它能预防和阻止预期之外的变量修改。 对于有修改需求的变量,就使用let声明。

到此这篇关于JavaScript变量中var,let和const的区别的文章就介绍到这了,更多相关js var,let,const内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript变量中var,let和const的区别

本文链接: https://lsjlt.com/news/167340.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript变量中var,let和const的区别
    目录前言ES5与ES6的区别1. 作用域2. 全局属性3. 变量提升与暂时性死区4. 重复声明let与const的区别1. 常量最佳实践前言 JavaScript中一共有3种用来声明...
    99+
    2024-04-02
  • javascript 变量声明 var,let,const 的区别
    目录作用域(Scope)是什么var 声明提升(Hoisting)let 声明const 声明作用域(Scope)是什么 作用域是程序的执行环境,它包含在当前位置可访问的变量和函数。...
    99+
    2024-04-02
  • javascript变量声明var,let,const的区别是什么
    本文小编为大家详细介绍“javascript变量声明var,let,const的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript变量声明var,let,const的区别是什么”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-30
  • JavaScript中var,let和const的区别是什么
    这篇文章主要为大家展示了“JavaScript中var,let和const的区别是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中var...
    99+
    2024-04-02
  • javascript中var与let、const的区别详解
    一、var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100; console.log(a,window.a); // 100 10...
    99+
    2022-12-23
    javascript中var与let const的区别详解 var let const区别
  • JavaScript ES6语法中let,const ,var 的区别
    一、变量声明的方式let / const let / const 共同点1.都是块级作用域2.在同一个作用域下,变量名不允许重复3.他们声明的全局变量并没有挂在 window对象上4...
    99+
    2024-04-02
  • Javascript 中 var 和 let 、const 的区别及使用方法
    目录1.var、let、const简介var 声明let 声明const 声明 总结1.var、let、const简介     &n...
    99+
    2023-01-13
    js中var和 let  const 区别 js中var和 let  const 使用
  • 浅谈JS中var,let和const的区别
    目录区别1区别2区别3区别4区别5区别6区别7区别1 let和var用来声明变量,const用来声明常量。 变量就是赋值后可以改变它的值,常量就是赋值后就不能改变它的值。 当声明为对...
    99+
    2024-04-02
  • JavaScript变量声明的var、let、const详解
    目录前言内容JavaScript的变量声明var的变量声明变量声明在函数作用域中变量重复声明变量声明提升怪异危险的varlet和const的变量声明块级作用域不可重复声明暂时性死区使...
    99+
    2024-04-02
  • JavaScript中var let const的用法有哪些区别
    目录1.重复声明1.1 var1.2 let1.3 const2.变量提升2.1 var2.2 let2.3 const3.暂时性死区3.1 var3.2 let3.3 conset...
    99+
    2024-04-02
  • javascript的var与let,const的区别是什么
    本篇内容主要讲解“javascript的var与let,const的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript的var与let,const的区别是什么”吧!说到...
    99+
    2023-06-22
  • JavaScript ES6语法中let,const ,var的区别是什么
    JavaScript ES6语法中let,const ,var的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、变量声明的方式let / con...
    99+
    2023-06-26
  • javascript的var与let,const之间的区别详解
    目录作为全局变量时变量提升暂时性死区块级作用域重复声明修改声明的变量(常量与变量声明)总结说到JavaScript中声明变量的几种方法也就是var、let、const了,let和co...
    99+
    2024-04-02
  • var、let及const的区别是什么
    这篇文章主要介绍了var、let及const的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇var、let及const的区别是什么文章都会有所收获,下面我们一起来看看吧。什么是JavaScript?首...
    99+
    2023-07-04
  • JavaScript中var与let的区别
    目录1.作用域表现形式不同2.是否变量提升的区别3.暂时性死区上的区别4.在同一个上下文中var可以重复声明,let不行前言: var是JavaScript刚出现时就存在的变量声明关...
    99+
    2024-04-02
  • JavaScript声明变量的这四兄弟(var、let、function、const)
    四兄弟的背景 在一个名为编程语言的村庄里,有不同姓氏的村民。例如Java、Python、Golang、JavaScript等姓氏,而接下来要介绍的就是JavaScript这个姓氏的一...
    99+
    2023-02-13
    JavaScript声明变量 js声明变量
  • Js中var,let,const的区别你知道吗
    目录一:区别:二:var声明的作用域三:var声明的变量提升四、let声明五:彻底区分var和let声明变量(作用域区别)1.var声明2.let 声明 六:const 声...
    99+
    2023-02-08
    js var let const的区别 let var声明变量区别 const var let
  • javascript中var和let有哪些区别
    这篇文章主要介绍了javascript中var和let有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • let和var的区别
    一、作用域不同 var声明的变量具有函数作用域,即它们的作用范围是整个函数。而let声明的变量则具有块级作用域,即它们的作用范围仅限于声明它们的代码块。 二、变量提升行为不同 var声明的变量会发生“提升”现象,即在编译阶...
    99+
    2023-10-29
    区别 var
  • JavaScript es6中var、let以及const三者区别案例详解
    首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?         ECMAScript是一个国际通过的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作