首页 > 其他分享 >var,let,const有什么不同

var,let,const有什么不同

时间:2023-10-30 10:34:25浏览次数:21  
标签:const 变量 作用域 let var 声明

varletconst 是 JavaScript 中的关键字,它们用于声明变量或常量。它们的主要区别在于作用域规则、块级作用域和声明的变量是否可以重新赋值。

  1. 作用域规则

    • var:在声明变量时拥有函数作用域或全局作用域。这意味着在函数内部用 var 声明的变量在函数外部也是可以访问的,同时它们会在函数调用时被创建,并在函数执行结束后被销毁。
    • let:在声明变量时拥有块级作用域。这意味着 let 声明的变量只在其声明的代码块(以及任何包含此代码块的代码块)中可见。它们在代码块开始时被创建,并在代码块结束时被销毁。
    • const:在声明变量时拥有块级作用域。与 let 类似,const 声明的变量只在其声明的代码块中可见。但是,与 let 不同的是,const 声明的变量是只读的,也就是说,一旦赋值后就不能再修改。
  2. 块级作用域

    • var 不支持块级作用域,只支持函数作用域或全局作用域。
    • letconst 支持块级作用域。这意味着可以在一个代码块(例如一个循环或一个条件语句)内部声明变量,只有在这个代码块及其包含的代码块中才能访问这个变量。
  3. 重新赋值

    • var 允许重新赋值。
    • let 也允许重新赋值。
    • const 不允许重新赋值,也就是说,一旦一个变量被声明为 const,就不能再改变其值。

使用这些关键字时,建议遵循以下规则:

  • 在函数内部使用 var,在全局作用域使用 varlet(取决于是否需要使用块级作用域)。
  • 在循环或条件语句等代码块中使用 letconst(取决于是否需要修改变量的值)。
  • 尽可能使用 const 来声明变量,除非确实需要修改变量的值。这样做可以避免意外地修改不应该修改的变量,从而提高代码的可读性和可维护性。

标签:const,变量,作用域,let,var,声明
From: https://www.cnblogs.com/css-ysy/p/17797215.html

相关文章

  • Luogu P4168 [Violet] 蒲公英 题解
    题目链接[Violet]蒲公英分析可以先将\(a[i]\)离散化然后考虑分块对于询问\(x,y\),\(x\)属于\(p\),\(y\)属于\(q\)当\(q-p<=1\)时直接暴力枚举即可,时间复杂度为\(O(\sqrt{n})\)\(else\)如图中间为分好块的地方我们发现,\(ans\)只可能为中间的众数或两边的......
  • 「CF715E」Complete the Permutations
    \(\text{「CF715E」CompletethePermutations}\)\(\text{Link}\)\(\text{Describe}\)给定长为\(n\)的且部分确定的置换\(p,q\)。定义\(p,q\)距离为通过交换\(p\)任意两项变为\(q\)的最小步数,对于\(0\lek\len-1\)求通过补全\(p,q\)使得\(p,q\)距离为\(k\)的......
  • springMVC controller控制器方法HttpServletRequest等参数的是谁传递进来的
    SpringMVC中两个重要的接口:请求方法参数的处理、响应返回值的处理,分别是HandlerMethodArgumentResolver和HandlerMethodReturnValueHandlerHandlerMethodArgumentResolver的实现类 ServletRequestMethodArgumentResolver 参数类型是实现或继承或是WebRequest、ServletRequest......
  • kubelet pleg is not healthy
    k8s1.19.0PLEG全称是PodLifecycleEventGenerator即Pod生命周期事件生成器,定时检查Pod状态,上报PodEvent事件。PLEGStart启动一个协程,每隔1s调用一次relist,根据最新的PodStatus生成PodLiftCycleEvent,通过eventChannel送到syncLoop消费,由syncPod来触发Pod同步处理,达到期望......
  • 无涯教程-Clojure - vary-meta函数
    返回与原始对象具有相同类型和值的对象,但具有组合的元数据。vary-meta-语法(vary-metaobjnew-meta)参数   - 'obj'是要检查是否有任何元数据与之关联的对象,"new-meta"是需要与对象关联的元数据值。返回值 -返回与原始对象具有相同类型和值的对象,但具有组合......
  • JAVA-EE在不使用MVC分层的情况下用一个servlet完成转账业务------Java-Web项目
    在不使用MVC分层的情况下用一个servlet完成转账业务packagecom.bjpowernode.Bank.servlet;importcom.bjpowernode.Bank.exception.AppException;importcom.bjpowernode.Bank.exception.MoneyNotEnoughException;importcom.bjpowernode.oa.utils.DBUtil;importjakarta.ser......
  • org.influxdb.InfluxDBException$UnableToParseException: unable to parse points
    org.influxdb.InfluxDBException$UnableToParseException:unabletoparsepoints是InfluxDB抛出的异常,表示无法解析数据点(points)。这个错误通常与数据格式不匹配或数据字段类型错误有关。为了解决这个问题,你可以按照以下步骤进行调试和修复:检查数据格式:确保要写入InfluxDB的......
  • CF248E Piglet's Birthday
    提前了一个月,就做掉了这题,不过还是庆祝一下吧。(考虑dp。令\(f_{u,i}\)表示货架\(u\)还剩\(i\)罐未被吃的蜂蜜的概率。答案就是\(\sumf_{u,0}\)。考虑一次修改\(u\tov\),由于被移动的蜜罐都被吃了,所以\(v\)的\(f\)数组不变,只需要考虑\(f_u\)的变化。枚举吃掉了......
  • CompletableFuture源码学习
    了解到CompletableFuture的基础用法之后,我们不禁好奇,以前的Future模式不支持如此好用的异步编程,CompletableFuture是如何做到的呢?这就需要我们去阅读源码了,通过源码我们才能了解到其设计思想和实现方式,我们分析下supplyAsync和thenApplyAsync这两个,并且是提供线程池的接口,因为......
  • Variational Autoencoders(VAE)
    在过去的几年中,基于深度学习的生成模型越来越受到关注,一方面这是因为该领域产生了一些惊人改进,另一方面受到关注也暗示着该领域进展迅猛。依靠大量数据,精心设计的网络体系结构和智能培训技术,深入的生成模型已经显示出了令人难以置信的能力,可以生成各种高度逼真的各种内容,例如图像......