【JavaScript】var、const、let三种声明变量的使用场景及区别

目录

前言

变量声明

区别


前言

        在ES6出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明变量的方式有 var 、 let 、 const 等多种声明变量的方式,那么这三种声明变量有什么区别呢?如果三种声明变量应该如何使用呢?

变量声明

  • 变量声明有三个 var let 和const
  • 我们应该用哪一个呢?
  • 首先排除var,老派写法,问题很多,不严谨,可以淘汰掉...
  • 那么先用哪一个呢? let or const?
  • 建议:const优先,尽量使用const,原因事:
    • const语义化更好
    • 很多变量我们声明的时候就知道他不会改变了,那为什么不用const呢?
    • 实际开发中也是如此,比如react框架,基本都是const
  • 请问以下代码是否可以将let改为const?
<script>

// 简单数据类型

let num1 = +prompt('请输入第一个数字')
let num2 = +prompt('请输入第二个数字')
alert(`两个数字相加的结果为${num1 + num2}`)

/* console.log(我叫' + '刘德华') // 我叫刘德华
let uname = '刘德华'
let song = '忘情水'
console.log(uname + song) // 刘德华忘情水 */

// 复杂数据类型 数组和对象
let arr = ['red','blue']
arr.push('pink')
console.log(arr)

let obj = {
uname: '张三',
age: '18岁',
}
obj.sex = '男'
console.log(obj)
</script>

    

<script>
 let num = 1
 num=num + 1
 conlose.log(num) // 2

 for(let i = 0; i<num.length;i++){
   document.write(num[i])
}
</script>

        第一个代码块中是可以的,因为它们的值都是没有变过的(没有重新赋值),其中,复杂数据类型是由堆和栈组成的,数组和对象只改变了数组内的值(堆),但数组和对象的地址没有改变(栈),只是在原来基础上增加一个元素,数组没有改变,改变的只是数组内的值,所以是可以用const来声明的(举个例子,比如今天天冷了,我套了一个马甲,我本身是没有任何改变的(栈),只是添加了一个马甲(堆),其中这个马甲就相当于数组或对象中新增的元素,对于我来说,我自己并没有改变(栈),改变的只是衣服而已(堆))
        第二个代码块中是不可以的,因为它们的值会做重新赋值的操作(变量中值会改变,进行重新赋值操作)

  • const声明的值不能改变,而且const声明变量的时候需要里面进行初始化
  • 对于引用数据类型,const声明的变量,里面存的不是值,是地址

32eb05cb381a44349e18aa774dbbb4a1.png

区别

        综上所述,现在的ES6中,var的老派写法,问题很多,不严谨,等多种因素,已经被淘汰掉了,let一般用于基本数据类型的值或者引用类型的地址发生变化的时候,需要用let,比如一个变量进行加减运算(for循环中的i++),const一般用于不修改栈里的值时就可以使用,也就是说,let通常声明的为变量(栈里的地址会改变,进行重新赋值操作),const通常声明的为常量(栈里的地址不会改变,没有重新赋值)

参考资源链接:[面试官竟然问我JavaScriptvarletconst有什么区别这样简单的问题?](https://wenku.youkuaiyun.com/doc/6412b737be7fbd1778d4981c?utm_source=wenku_answer2doc_content) 在JavaScript中,varletconst都是用来声明变量的关键字,但它们在作用域和特性上有着明显的差异。为了帮助你深入理解这三种声明方式区别,我强烈建议阅读这篇资料:《面试官竟然问我JavaScriptvarletconst有什么区别这样简单的问题?》。文章深入浅出地分析了这三个关键字,适合在准备面试或技术讨论时快速回顾和巩固知识点。 var声明变量存在变量提升,也就是说变量可以在声明之前被访问,其作用域是函数作用域或全局作用域。letconst则没有变量提升,它们的作用域仅限于块级作用域(即花括号{}内部)。具体来说: 1. var: - 可以在声明前访问,值为undefined。 - 函数作用域或全局作用域。 - 可以重复声明同一变量。 示例: function exampleVar() { console.log(a); // undefined,变量提升 var a = 'value'; console.log(a); // 'value' } exampleVar(); 2. let: - 没有变量提升,不可在声明前访问,会抛出ReferenceError。 - 块级作用域。 - 不可以重复声明同一变量。 示例: function exampleLet() { let a = 'value'; console.log(a); // 'value' } exampleLet(); 3. const: - 和let一样,没有变量提升,不可在声明前访问。 - 块级作用域。 - 必须在声明时初始化,之后不可修改。 示例: function exampleConst() { const a = 'value'; console.log(a); // 'value' // a = 'new value'; // TypeError: Assignment to constant variable. } exampleConst(); 在实际开发中,推荐优先使用const,只在你知道变量值会变化时使用let。而var由于其作用域和提升的特性,在现代JavaScript中应尽量避免使用,除非是在处理旧代码或与var兼容性相关的特定情况。 掌握了varletconst区别后,你将能够编写更加健壮和可预测的代码。为了进一步扩展你对变量作用域和声明的理解,除了阅读上述文章外,还可以探索更多关于JavaScript闭包、作用域链和ES6+新特性的资源。 参考资源链接:[面试官竟然问我JavaScriptvarletconst有什么区别这样简单的问题?](https://wenku.youkuaiyun.com/doc/6412b737be7fbd1778d4981c?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pixel0216

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值