返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Javascript 中 var 和 let 、const 的区别及使用方法
  • 194
分享到

Javascript 中 var 和 let 、const 的区别及使用方法

js中var和 let const 区别js中var和 let const 使用 2023-01-13 12:01:26 194人浏览 泡泡鱼
摘要

目录1.var、let、const简介var 声明let 声明const 声明 总结1.var、let、const简介     &n

1.var、let、const简介

        ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的命名占位符。有三个关键字可以声明变量:var、let、const。其中 var 在ECMAScript 的所有版本中都可以使用,而 const 和 let 只能在ECMAScript 6 及更高版本中使用。

var 声明

         var 关键字在定义变量中定义和使用中不严格。

1.定义单个变量和同时定义多个变量,在定义多个变量时用逗号隔开。两者不赋值操作。

<script>
    var userName;
    var age,address,phone;
    console.log(userName)
    console.log(age)
    console.log(address)
    console.log(phone)
</script>

        显然这样输出的值为 undefined 类型。 

 2.定义单个变量和同时定义多个变量,在定义多个变量时用逗号隔开。两者赋值操作。

<script>
    var userName = 'sa'
    var age = 18,address = '南昌',phone = '19238824523'
    console.log(userName)
    console.log(age)
    console.log(address)
    console.log(phone)
</script>

 3.var重复声明变量和赋值

        在 ECMAScript 中 var 关键字声明的变量可以重复声明,但是赋值操作会覆盖前面已经给变量赋的值。值不仅可以改变数据也可以改变相关的数据类型。

<script>
 var userName = 'sa'
 console.log(userName)
 var userName = 77  // 这边也可以省略var
 console.log(userName)
</script>

4.var 声明的作用域问题

        var声明的全局变量全局作用域会挂载到 window 对象上,可以使用window. 的形式访问该变量,或者直接使用变量名的方式。在函数体内部的用var声明的变量是局部变量,当省略 va r时,当前变量会定义为全局变量,但是当我要得到这个变量的值时,我们需要先执行一下函数。

<script>
    // 定义函数,测试两个变量是否在函数体外部可以使用
    function test(){
        var msg = '这是局部变量'
        message = '这是全局变量'
 
    }
    test()
    console.log(window.message)
    console.log(message)
    console.log(msg)
</script>

        输出结果如下:message 可以获得,但是 msg 不行。关键问题在于,使用 var 声明的变量会成为包含它在函数的局部变量。在一个函数内部定义了一个变量,就意味着该变量将在函数退出时被销毁。

 5.var 声明提升

        “提升”,也就是把所有的变量声明都拉到函数作用域的顶部。此外,反复多次使用 var 声明同一个变量也没有问题。

<script>
    // 定义函数,测试变量提升
    function test(){
        console.log(msg)
        var msg = '变量'
        console.log(msg)
    }
    test()
</script>

        正常的我们会认为,变量未定义先使用,会报一个 ~~ is not defined 的错误。但是 var 存在变量提升的行为,以上代码等同于:

 function test(){
        var msg
        console.log(msg)
         msg = '变量'
        console.log(msg)
    }
    test()

两者的输出结果都是如下:

let 声明

        let和var的作用差不多,但是有着非常重要的区别。最明显的区别就是,let 声明的范围是块作用域,而 var 声明的范围是函数作用域。

        代码块由一个左花括号( { )和一个右花括号( } )标识结束。

1.简单示意 let 和 var 的区别

    // let 和 var 的作用域区别
if (true) {
    var username = 'sa'
    let msg = 'ss'
}
    console.log(username)
    console.log(msg)

        在当前代码中,let 定义的 msg 只作用与 if 的代码块中,在外部无法使用 msg 该变量。

 2. let 不可以重复声明变量,var 可以重复声明变量

<script>
var userName
var userName
let msg
let msg
</script>

        这里提示 msg 重复定义:

3.将 let 和 var 混合重复定义一个变量

<script>
var userName
let userName
 
let msg
var msg
// 这边将会报一个重复定义的错误
 
</script>

 当然,javascript 引擎会记录用于变量声明的标识符及其所在的块作用域,因此嵌套使用相同的标识符不会报错,因为同一个块中没有重复声明。

<script>
let age = 20
console.log(age) // 20
if (true) {
    let age = 18
    console.log(age) // 18
}
</script>

4.let 声明的变量不会在作用域中被提升

<script>
function test() {
    console.log(age)
    let age = 20
}
test()
</script>

         let 声明的变量不会在作用域中被提升是和 var 一个很重要的区别。所以 let 声明变量,必须要先声明后使用,否则报错。 

        在解析代码时,JavaScript 引擎也会注意在块后面的 let 声明,只不过在此之前不能以任何方式来引用未声明的变量。在 let 声明之前的执行瞬间被称为“暂时性死区”,在此阶段引用任何后面才声明的变量都会抛出 ReferenceError。

5.let的全局声明不会成为 window 对象的属性( var 声明的变量则会)

<script>
var msg = '我是var声明的变量'
let mess = '我是let声明的变量'
console.log(window.msg)
console.log(window.mess)
</script>

 6.条件声明

        在使用 var 声明变量时,由于声明会被提升,JavaScript 引擎会自动将多余的声明在作用域顶部合并为一个声明。因为 let 的作用域是块,所有不可能检查是否已经使用了 let 声明过同名变量,同时也就不可能在没有声明的情况下使用它。

错误示范如下:

<script>
    // 当前声明两个变量
    var msg = '我是var声明的变量'
    let mess = '我是let声明的变量'
</script>
<script>
    var msg = 'sa' // 这里没问题,var 存在变量提升声明来处理
    let mess = 'ss' // 当之前声明了变量mess,这里将报错,let 不存在变量提升
</script>

<script>
let mess // 当前只声明了一个 let 变量
</script>
<script>
  if (typeof mess === 'undefined'){
      let mess
  }
  mess = 'sa' // mess 被限制在 if {} 作用域块中,当前赋值为全局赋值
  console.log(mess) // sa
  try {
      console.log(age)
  }
  catch (error) {
      let age
  }
  age = 20  // age 被限制在 catch {} 作用域块中,当前赋值为全局赋值
  console.log(age) // 20
</script>

 注:条件声明比较难以理解,这是一种反模式。这会让我们的程序变得更加难理解。

7.for循环中的 let 声明

        当我们在用 var 时,for循环定义的迭代变量会渗透到循环体外部。

for (var i = 0; i < 6; i++) {
    setTimeout(() => {
        console.log(i) },0) //  这将打印六个 6
}

        这种原因的出现情况是因为由于 var 声明的变量不存在块级作用域在退出循环时,迭代变量保存的是导致循环退出的值:6。在之后执行超时逻辑时,所有的 i 都是同一个变量,最终导致输出的值相同。

        使用 let 声明 i 时:

for (let i = 0; i < 6; i++) {
    setTimeout(() => {
        console.log(i) },0) //  这将打印六个 6
}

        当使用let 声明变量时,JavaScript 引擎在后台会为每一个迭代循环声明一个新的迭代变量,每个 setTimeout 引用的都是不同的变量实例,所以输出的值不同也就是我们期望中的值,也是循环执行过程中每一个迭代变量的值。

        在我们对dom节点使用for循环绑定事件时,一般也是用 let 声明迭代变量。

const 声明

         const 的行为和 let 基本相同,唯一一个重要的区别就是它在声明变量的同时必须初始化变量,且尝试修改 const 声明的变量会导致运行时错误。

1.const 声明的变量不允许修改

<script>
const age = 20
age = 30
</script>

 2.const 也是不可重复声明

<script>
const age = 20
const age = 30
</script>

 3.const 声明的作用域也是块

<script>
if (true) {
    const age = 30
}
console.log(age)
</script>

4.const 中注意的点

         const 声明限制只适用于它指向变量的引用。换句话说,如果 const 变量引用的是一个对象,那么修改这个对象内部的值不违反 const 的限制。引用未发生改变就行。

例如:修改了对象中 name 的值但不会报错。

const student = {
    name: 'sa',
    age: 18,
    address: 'shanghai'
}
student.name = 'saa'
console.log(student.name) // 输出saa

        如果你想用const 声明一个不会被修改的 for 循环变量,那也是可以的。也就是说,每次迭代只是创建一个新变量。这对 for-in 和 for-of 循环都是有意义的。

例如:

for (const key in { a: 1, b: 2, c: 3 }){
    console.log(key)
}

 总结

在我们日常使用变量声明时,遵循一下几点:

        1.不使用 var

        2.const 优先,let 次之

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

--结束END--

本文标题: Javascript 中 var 和 let 、const 的区别及使用方法

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

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

猜你喜欢
  • 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 使用
  • JavaScript变量中var,let和const的区别
    目录前言ES5与ES6的区别1. 作用域2. 全局属性3. 变量提升与暂时性死区4. 重复声明let与const的区别1. 常量最佳实践前言 JavaScript中一共有3种用来声明...
    99+
    2024-04-02
  • JavaScript ES6语法中let,const ,var 的区别
    一、变量声明的方式let / const let / const 共同点1.都是块级作用域2.在同一个作用域下,变量名不允许重复3.他们声明的全局变量并没有挂在 window对象上4...
    99+
    2024-04-02
  • JavaScript中var,let和const的区别是什么
    这篇文章主要为大家展示了“JavaScript中var,let和const的区别是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中var...
    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的区别详解
    一、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区别
  • var、let及const的区别是什么
    这篇文章主要介绍了var、let及const的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇var、let及const的区别是什么文章都会有所收获,下面我们一起来看看吧。什么是JavaScript?首...
    99+
    2023-07-04
  • 浅谈JS中var,let和const的区别
    目录区别1区别2区别3区别4区别5区别6区别7区别1 let和var用来声明变量,const用来声明常量。 变量就是赋值后可以改变它的值,常量就是赋值后就不能改变它的值。 当声明为对...
    99+
    2024-04-02
  • JavaScript ES6语法中let,const ,var的区别是什么
    JavaScript ES6语法中let,const ,var的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、变量声明的方式let / con...
    99+
    2023-06-26
  • 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-22
  • JavaScript es6中var、let以及const三者区别案例详解
    首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?         ECMAScript是一个国际通过的...
    99+
    2024-04-02
  • javascript的var与let,const之间的区别详解
    目录作为全局变量时变量提升暂时性死区块级作用域重复声明修改声明的变量(常量与变量声明)总结说到JavaScript中声明变量的几种方法也就是var、let、const了,let和co...
    99+
    2024-04-02
  • JavaScript中var与let的区别
    目录1.作用域表现形式不同2.是否变量提升的区别3.暂时性死区上的区别4.在同一个上下文中var可以重复声明,let不行前言: var是JavaScript刚出现时就存在的变量声明关...
    99+
    2024-04-02
  • 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,const的区别是什么
    本文小编为大家详细介绍“javascript变量声明var,let,const的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript变量声明var,let,const的区别是什么”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-30
  • javascript中var和let有哪些区别
    这篇文章主要介绍了javascript中var和let有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • 一起聊聊var、let以及const的区别(代码示例)
    接下来我们试着修改一下指针,让person指向一个新对象,最后果然报错const person = { name : 'make', sex : '男'}person = { name : ...
    99+
    2023-05-14
    const let var
  • JavaScript中var与let的区别是什么
    本篇文章给大家分享的是有关JavaScript中var与let的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言:var是JavaScript刚出现时就存在的变量声...
    99+
    2023-06-22
  • TypeScript中let和var的区别介绍
    目录1、作用域不同2、let没有变量提升3、let变量不能重复声明4、for循环中的let与var1、作用域不同 用var声明的变量,只有函数作用域和全局作用域,没有块级作用域。而l...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作