首页 > web前端 > js教程 > 正文

JavaScript中var,let与const之间有什么区别

清浅
发布: 2019-04-22 15:05:21
原创
3867人浏览过

var,let和const的区别在于:var的变量声明在代码执行前且工作范围在当前执行的上下文中,let是允许创建一个变量但只作用在它的块里,const与let什么相似唯一的差别是const定义的变量不可更改

本篇文章主要是通过在JavaScript (ES6) 中创建变量的方法来介绍var、 let和const之间的区别,具有一定的参考作用,希望对大家有所帮助。

JavaScript中var,let与const之间有什么区别

【推荐课程:JavaScript教程

var VS let

立即学习Java免费学习笔记(深入)”;

var和let之间的主要区别不是使用函数作用域,而是使用块作用域。 这意味着使用let关键字创建的变量在创建它的“块”内以及任何嵌套块中都可用。 

function discountPrices (prices, discount) {
  var a = []
  for (var i = 0; i < prices.length; i++) {
    var discountedPrice = prices[i] * (1 - discount)
    var finalPrice = Math.round(discountedPrice * 100) / 100
    a.push(finalPrice)
  }  console.log(i) // 3  console.log(discountedPrice) // 150 
  console.log(finalPrice) // 150
  return a
  }
登录后复制

在上面的例子中之所以能够在for循环之外使用i,discountedPrice和finalPrice,是因为它们是用var声明的,而var是函数作用域。如果我们将var换成let会发生什么情况呢? 

function discountPrices (prices, discount) {
  let a = []
  for (let i = 0; i < prices.length; i++) {
    let discountedPrice = prices[i] * (1 - discount)
    let finalPrice = Math.round(discountedPrice * 100) / 100
    a.push(finalPrice)
  }  
  console.log(i) // 3  
  console.log(discountedPrice) // 150  
  console.log(finalPrice) // 150
  return a
  }
  discountPrices([100, 200, 300], .5) // 这儿会报错i未定义
登录后复制

这个案例告诉我们的是,使用let声明的变量是块作用域,而不是函数作用域。 因此在“块”之外访问i(或discountedPrice或finalPrice)都会报错

下一个区别与变量提升有关。提升的定义是“JavaScript解释器会在所谓的'创建'阶段将变量声明赋值为undefined的默认值。

例:

function discountPrices (prices, discount) {  
console.log(discounted) // undefined
  var a = []
  for (var i = 0; i < prices.length; i++) {
    var discountedPrice = prices[i] * (1 - discount)
    var finalPrice = Math.round(discountedPrice * 100) / 100
    a.push(finalPrice)
  }
  console.log(i) // 3
  console.log(discountedPrice) // 150
  console.log(finalPrice) // 150
  return a}
登录后复制

如果想要在声明变量之前使用let声明的变量,而不是未定义(如使用var声明的那些变量),程序将会报错

function discountPrices (prices, discount) {  
console.log(discounted) // 错误
  let a = []
  for (let i = 0; i < prices.length; i++) {
    let discountedPrice = prices[i] * (1 - discount)
    let finalPrice = Math.round(discountedPrice * 100) / 100
    a.push(finalPrice)
  }
  console.log(i) // 3
  console.log(discountedPrice) // 150
  console.log(finalPrice) // 150
  return a}
登录后复制

结论是

var:变量声明在代码执行之前被处理,它的作用范围在其当前执行的上下文中

let:let语句允许我们创建一个变量,其范围仅限于使用它的块里。

let VS const

既然已经理解了var和let之间的区别,那么const呢? 事实证明,const与let几乎完全相同。 但是唯一的区别是,一旦使用const为变量赋值,就无法将其重新赋值给新值。

let name = 'Tyler'
const handle = 'tylermcginnis'
name = 'Tyler McGinnis' //正确
handle = '@tylermcginnis' //错误
登录后复制

从上面的内容可以看出用let声明的变量可以重新赋值,但用const声明的变量不能。所以只要你想要一个变量是不可变的,你可以用const声明它。但是用const声明变量并不意味着它是不可变的,只是无法重新赋值,例:

const person = {
  name: 'Kim Kardashian'
  }
person.name = 'Kim Kardashian West' // 正确
person = {} // 错误
登录后复制

因此即使使用const声明对象,也不意味着不能改变其任何属性。 它只表示无法将其重新分配给新值

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

以上就是JavaScript中var,let与const之间有什么区别的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号