js中声明变量的var、let和const的差异和对比

varletconst 的差异主要体现在作用域、变量提升、重复声明、重新赋值以及在循环中的行为等。

1. var

  • 作用域: var 声明的变量具有函数作用域或全局作用域。在函数内部声明的变量只在函数内部有效,而在函数外部声明的变量在整个函数外部都有效。
  • 变量提升:在变量声明之前就可以使用,但值为 undefined 。这是因为变量声明会被提升到函数或全局作用域的顶部。
  • 重复声明:允许多次声明同一个变量,后续声明会覆盖前面的声明。
  • 重新赋值:可以重新赋值。
function example() {console.log(x); // 输出 undefinedvar x = 10;console.log(x); // 输出 10
}example();
console.log(x); // 报错,因为 x 只在 example 函数内部有效

2. let

  • 作用域: let 声明的变量具有块级作用域。在 {} 内部声明的变量只在该块内部有效。
  • 变量提升:不会发生变量提升,如果在声明之前访问变量会报错。
  • 重复声明:不允许在同一作用域内重复声明同一个变量,会报错。
  • 重新赋值:可以重新赋值,但不能重新声明。
function example() {console.log(x); // 报错,因为 x 还未声明let x = 10;console.log(x); // 输出 10
}example();
console.log(x); // 报错,因为 x 只在 example 函数内部有效

3. const

  • 作用域: const 声明的变量具有块级作用域,和 let 类似。
  • 变量提升:不会发生变量提升,如果在声明之前访问变量会报错。
  • 重复声明:不允许在同一作用域内重复声明同一个变量,会报错。
  • 重新赋值:不可重新赋值,但对于复杂类型的数据(如数组或对象),虽然不能重新赋值,但可以修改其内部的属性或元素。
const PI = 3.14;
// PI = 3.14159; // 报错,因为 const 声明的变量是常量,不可重新赋值const arr = [1, 2, 3];
arr.push(4);
console.log(arr); // 输出 [1, 2, 3, 4]

4. 在循环中的行为

在循环中使用 var 会导致变量的共享问题,而使用 letconst 可以避免这个问题。

for (var i = 0; i < 5; i++) {setTimeout(function() {console.log(i); // 输出 5, 5, 5, 5, 5}, 100);
}for (let j = 0; j < 5; j++) {setTimeout(function() {console.log(j); // 输出 0, 1, 2, 3, 4}, 100);
}

由于 var 声明的变量具有函数作用域,循环结束后 i 的值为 5 ,而在第一个循环中, setTimeout 回调函数是在循环结束后才执行的,因此输出的都是 5 。而在第二个循环中, let 声明的变量具有块级作用域,每次循环都会创建一个新的作用域,因此 setTimeout 回调函数中可以访问到当前循环的 j 的值。

在实际开发中,推荐优先使用 letconst 来声明变量,以避免潜在的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GSVA -- 学习记录

文章目录 1.原理简介2. 注意事项3. 功能实现代码实现部分 4.可视化5.与GSEA比较 1.原理简介 Gene Set Variation Analysis (GSVA) 基因集变异分析。可以简单认为是样本数据中的基因根据表达量排序后形成了一个rank list&#xff0c;这个rank list 与 预设的gene sets&#xff…

第三百七十回

文章目录 1. 概念介绍2. 使用方法2.1 获取所有时区2.2 转换时区时间 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享一些好的Flutter站点"相关的内容&#xff0c;本章回中将介绍timezone包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

【JavaEE进阶】 @ControllerAdvice源码分析

文章目录 &#x1f343;前言&#x1f384;ControllerAdvice源码分析&#x1f6a9;initHandlerAdapters(context)&#x1f6a9;initHandlerExceptionResolvers(context) ⭕总结 &#x1f343;前言 在前面的项目开发中&#xff0c;我们使用了统一数据返回和统一异常的功能 它们…

如何让网页APP化 渐进式Web应用(PWA)

前言 大家上网应该发现有的网页说可以安装对应应用&#xff0c;结果这个应用好像就是个web&#xff0c;不像是应用&#xff0c;因为这里采用了PWA相关技术。 PWA&#xff0c;全称为渐进式Web应用&#xff08;Progressive Web Apps&#xff09;&#xff0c;是一种可以提供类似…

【C++】树形关联式容器set、multiset、map和multimap的介绍与使用

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.关联式容器 2.键…

MATLAB R2024a 主要更新内容

系列文章目录 前言 一、主要更新 计算机视觉工具箱 —— 为二维和三维视觉任务设计算法、标注数据并生成代码。深度学习工具箱 —— 支持变换器等架构&#xff1b;导入并共同模拟 PyTorch 和 TensorFlow 模型。仪器控制工具箱 —— 使用仪器资源管理器应用程序管理带有 IVI 和…

vue项目build 静态文件部署到fastapi后台中访问白屏,访问不到?

正常创建VUE项目那些应该都会&#xff0c;到项目最后 npm run build然后会生成一个dist文件夹 然后把这个文件夹的东西复制去到fastapi项目根目录创建一个static文件夹 然后开始写点代码 # main.py绑定静态文件目录 app.mount("/static", StaticFiles(directory&…

4核8g服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

Linux按键输入实验-按键功能完善

一. 简介 前面一篇文章实现了 按键的字符设备驱动代码框架&#xff0c;文章地址如下&#xff1a; Linux按键输入实验-按键的字符设备驱动代码框架-CSDN博客 本文在 字符设备驱动框架实现的基础上&#xff0c;加入按键GPIO的初始化功能。 二. Linux按键输入实验-按键的GPIO…

广和通发布基于骁龙460移动平台的智能模组SC208,加速移动终端智能化

世界移动通信大会MWC 2024期间&#xff0c;广和通发布基于骁龙460移动平台开发的LTE智能模组SC208&#xff0c;旨在为智慧零售、智能手持、车载后装、多媒体等领域提供稳定高效的智能联网体验&#xff0c;加速行业应用创新与变革。 高通CDMA技术亚太有限公司副总裁ST Liew表示&…

代码遗产:探索祖传代码的历史、挑战与现代融合艺术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

【代码解读】OpenCOOD框架之model模块(以PointPillarFCooper为例)

point_pillar_fcooper PointPillarFCooperPointPillarsPillarVFEPFNLayerPointPillarScatterBaseBEVBackboneDownsampleConvDoubleConv SpatialFusion检测头 &#xff08;紧扣PointPillarFCooper的框架结构&#xff0c;一点一点看代码&#xff09; PointPillarFCooper # -*- c…

Linux环境安装jira

jira 是项目与事务跟踪工具&#xff0c;被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。 jira 软件安装包直接搜官网&#xff0c;然后可以选择免费的来下载&#xff1a; 安装 jira 之前&#xff0c;需要 Java 和 mysql 环境的…

时隔一年的测评:gpt3.5发展到什么程度了?

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍1、chatgpt是什么&#xff1f;2、主要特点3、工作原理4、应用限制5、使…

亚信安慧AntDB助力全链路实时化

实时数据平台&#xff0c;快速实现企业全链路实时化 引入数据仓库、数据挖掘、HTAP等先进理念&#xff0c;通过实时数据应用平台来装载庞大的信息量&#xff0c;进行实时分析处理&#xff0c;克服数据处理过程中的困难&#xff0c;是当下各企事业单位、互联网、金融&#xff0c…

大数据集群管理软件 CDH、Ambari、DataSophon 对比

文章目录 引言工具介绍CDHAmbariDataSophon 对比分析 引言 大数据集群管理方式分为手工方式和工具方式&#xff0c;手工方式一般指的是手动维护平台各个组件&#xff0c;工具方式是靠大数据集群管理软件对集群进行管理维护。本文针对于常见的方法和工具进行比较&#xff0c;帮助…

前端架构: 脚手架工具rxjs的快速上手应用

rxjs rxjs 是一个异步的库和Promise是非常的相似 文档&#xff1a;https://www.npmjs.com/package/rxjs Weekly Downloads 44,474,389 (动态数据) 说明这个库也是非常的流行 安装 $ npm i -S rxjs 使用 import { range, filter, map } from rxjs;range(1, 200).pipe(filte…

早产儿视网膜病变分期,自动化+半监督(无需大量医生标注数据)

早产儿视网膜病变 ROP 分期 提出背景解法框架解法步骤一致性正则化算法构建思路 实验 提出背景 论文&#xff1a;https://www.cell.com/action/showPdf?piiS2589-0042%2823%2902593-2 早产儿视网膜病变&#xff08;ROP&#xff09;目前是全球婴儿失明的主要原因之一。 这是…

list_head的使用方法

最近用到了list_head,在这里记录一下。如果要搞清楚list_head的使用方法,需要了解container_of的原理。container_of可以参考:container_of宏的简介及使用-CSDN博客 先上测试的驱动代码: #include<linux/init.h> //初始换函数 #include<linux/kernel.h> //内…

Dledger部署RocketMQ高可用集群(9节点集群)

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容规划集群准备工作节点0配置&#xff08;ip地址为192.168.80.101的机器&#xff09;节点1配置&#xff08;ip地址为192.168.80.102的机器&#xff09;节点2配置&#xff08;ip地址为192.168.80.103的机器&#xff09;在所有…