当前位置: 首页 > news >正文

JavaScript var let区别

文章目录

  • JavaScript var & let区别
      • 变量作用域
      • 变量提升
      • 变量重复声明
      • 全局对象属性
      • for循环中的作用域

JavaScript var & let区别

var和let都是用来声明变量的关键字。

变量作用域

var声明的变量作用域是函数作用域或全局作用域,而let声明的变量作用域是块级作用域。

function test1() {var a = 1;if (true) {var a = 2;console.log(a);}console.log(a);
}
test1();
// 2
// 2
function test2() {let a = 1;if (true) {let a = 2;console.log(a);}console.log(a);
}
test2();
// 2
// 1

说明:test1函数中,if语句中的变量a覆盖了函数作用域中的变量a,因此2次输出都是2.

test2函数中,if语句中的a变了只在块级作用域中生效,因此第二次输出的a变量为1。

变量提升

var声明的变量会发生变量提升,即变量可以在声明前使用,而let声明的变量不会发生变量提升

function test1() {console.log(a);var a = 1;
}
test1();
// undefined
function test2() {console.log(a);let a = 1;
}
test2();
// Uncaught ReferenceError: Cannot access 'a' before initialization

说明:test1函数中,因为var声明的变量存在变量提升,即使变量a在声明前使用也不会不报错,输出undefined。

test2函数中,let声明的变量不会发生变量提升,因此在声明前使用会报错。

变量重复声明

同一作用域内,var声明的变量可以被重复声明,而let声明的变量不允许被重复声明。

function test1() {var a = 1;var a = 2;console.log(a);
}
test1();
// 2
function test2() {let a = 1;let a = 2; //提示错误console.log(a);
}

说明:test1函数中,变量a可以被重复声明,最终输出的值为2.

test2函数中,变量a不能重复声明,报错提示Identifier 'a' has already been declared*

全局对象属性

在全局作用域下,用var声明的变量会成为全局对象的一个属性,而let声明的变量不会。

var a = 1;
console.log(window.a); // 1let b = 2;
console.log(window.b); // undefined

说明:变量a被声明为全局变量,可以通过window对象访问。

变量b不会称为全局对象,因此会输出undefined。

for循环中的作用域

在循环语句中,用var声明的变量会存在作用域提升和共享的问题,而用let声明的变量则不存在这些问题。

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

说明:test1函数中,var声明的变量在函数作用域中会发生变量提升问题,最终会输出5个5.

test2函数中,let声明的变量不存在这些问题,会输出0~4。

相关文章:

JavaScript var let区别

文章目录JavaScript var & let区别变量作用域变量提升变量重复声明全局对象属性for循环中的作用域JavaScript var & let区别 var和let都是用来声明变量的关键字。 变量作用域 var声明的变量作用域是函数作用域或全局作用域&#xff0c;而let声明的变量作用域是块级作…...

Thinkphp 6.0容器和依赖注入

本节课我们来学习一下依赖注入的用法&#xff0c;以及容器的用法。 一&#xff0e;依赖注入 1. 手册对依赖注入比较严谨的说明&#xff0c;具体如下&#xff1a; 依赖注入其实本质上是指对类的依赖通过构造器完成自动注入&#xff0c;例如在控制器架构方法和操作 方法中一旦对参…...

Type javax.servlet.http.HttpServletRequest not present

运行环境 Swagger 3.0.0、springboot 3.0.0 产生原因&#xff1a; Swagger 3.0.0不支持spring3.0.0 两个解决方案&#xff1a; 1.降低springboot版本为2.x 2.放弃Swagger&#xff0c;使用 springdoc-openapi-starter-webmvc-ui 第二种解决方案&#xff1a; <dependen…...

一键配置Ubuntu的OpenHarmony基础编译环境

一键配置Ubuntu的OpenHarmony基础编译环境 一、配置前说明 该更新源仅适用于Ubuntu以下系列 Ubuntu18.04 Ubuntu20.04 Ubuntu22.04 强烈推荐Ubuntu20.04&#xff0c;本人使用的一直都是Ubuntu20.04 wsl的配置参见 如果使用的window wsl安装&#xff0c;则关于wsl配置可参考&a…...

ASP网络求职招聘系统的设计与实现

本文主要介绍了ASP&#xff0c;数据库等相关知识&#xff0c;同时较为详尽的阐述了网络求职招聘系统的实现。本系统是使用基于HTML语言&#xff0c;嵌套JavaScript源代码的ASP编程技术来开发&#xff0c;并以IIS为服务平台实现网络求职招聘系统的构建。后台数据库选用的是ACCES…...

面试—C++《智能指针》常考点

目录 1.为什么需要智能指针 2. 内存泄漏 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2 内存泄漏分类 2.3 如何检测内存泄漏 2.4如何避免内存泄漏 3.智能指针的使用及原理 3.3 std::auto_ptr 3.4 std::unique_ptr 3.5 std::shared_ptr 1.为什么需要智能指针 下…...

自动化测试方案编写思路

澄清问题: 目标&#xff1a;完成项目的自动化测试&#xff0c;设计一个方案&#xff0c;告诉领导打算怎么做&#xff1f;有哪些流程&#xff1f;花多长时间&#xff1f;需要哪些资源帮助&#xff1f;达到什么样的效果&#xff1f; 现状&#xff1a;需求分析-是个什么样的项目&a…...

【爬虫】案例04:某小说网多线程小说下载

时光轮回&#xff0c;冬去春来&#xff0c;转眼时间来到了2023年4月。天空沥沥淅淅下着小雨&#xff0c;逐渐拉上了幕布。此刻&#xff0c;正值魔都的下班高峰&#xff0c;从地铁站出来的女孩子纷纷躲到一边&#xff0c;手指飞快的划过手机屏幕&#xff0c;似乎在等待男朋友送来…...

海外独立站创业,Shopify网站如何引流

上一期给大家科普了如何快速创建自己的独立站 但往往独立站的难点在于站外引流 今天就给大家分享可以通过哪些渠道给独立站引流 - ⚡SEO排名&#xff1a;Google SEO的重要性不必多说&#xff0c;尽快注册歌账号&#xff0c;并开通Google Ad和Google Merchant Center&#…...

基于51单片机的室内湿度加湿温度声光报警智能自动控制装置设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机湿度 获取完整无水印论文报告&#xff08;内含电路原理图和源程序代码&#xff09; 在日常生活中加湿器得到了广泛的应用&#xff0c;但是现有的加湿器都需要手工控制开启和关闭并且不具备对室内空气温湿度的监测&am…...

解决:github爆 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

目录1. 背景2. 解决办法3. 原因&#xff0c;感兴趣的可以看看1. 背景 在拉取github上一个新项目的时候爆出 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 第一反应是电脑被黑了&#xff0c;传说中的中间人攻击(题外话一下&#xff0c;其实所有的代理软件都算是中间人哦~…...

【django开发手册】如何使用select_related进行一次连表查询

前言 Django是一款Python Web框架&#xff0c;致力于充分利用Python的简洁语法和语言特性来提高Web开发的效率。其中一个强大的特性是ORM&#xff08;Object-Relational Mapping&#xff09;&#xff0c;它使开发者可以使用Python代码而不是SQL查询语言来访问数据库。ORM不仅使…...

二、MySQL 基础

二、MySQL 基础 2.1 MySQL 简介 MySQL 是一款流行的开源数据库&#xff0c;也是一个关系型数据库管理系统 在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一 2.1.1 MySQL 发展历史 时间里程碑1996…...

项目中常用写法(前端)

项目中常用写法&#xff08;前端&#xff09;vue等待某个方法执行结束后&#xff0c;在执行判断js是不是undefined类型父组件传值到子组件state的值在标签中直接使用读取html&#xff0c;去掉字符串中的html标签字符串去掉中括号去掉双引号判断数组中是否包含某个值在某个ui框架…...

【面试】Java并发编程面试题

文章目录基础知识为什么要使用并发编程多线程应用场景并发编程有什么缺点并发编程三个必要因素是什么&#xff1f;在 Java 程序中怎么保证多线程的运行安全&#xff1f;并行和并发有什么区别&#xff1f;什么是多线程多线程的好处多线程的劣势&#xff1a;线程和进程区别什么是…...

HAProxy和Nginx搭建负载均衡器

负载均衡器是一个常用于分布式计算和网络应用中的系统组件&#xff0c;主要用于将客户端的请求分发到多个后端服务器上&#xff0c;以实现高可用性、高性能和可扩展性。常见的负载均衡器软件包括HAProxy和Nginx。 本文将介绍负载均衡器的原理和应用&#xff0c;以及使用HAProx…...

【集大成篇】数据类型( C、C++、Java )对比

1、C 语言数据类型关键字取值范围内存占用字符型char -128~1271整 型short-32768~327672int-2147483648~2147483647 (10位数&#xff09;4long (int)-2147483648~2147483647 (10位数&#xff09;4/8long long (int)-9223372036854775808~-9223372036854775807 (19位数&#xff…...

python编程:从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)

python编程实现&#xff1a;从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外) 一、编程题目 从键盘输入一个正整数n(n>2)&#xff0c;请编程求解并输出大小最接近n的素数(n本身除外)。 (温馨提示&#xff0c;结果可能是2个哦) 二、输入输出样例…...

spring的面试宝典

1、什么是spring框架&#xff1f; spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开源框 架. 2.spring的作用? 方便解耦,简化开发&#xff0c;AOP编程支持&#xff0c;声明式事务支持&#xff0c;集成Juni…...

ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合深度应用

查看原文>>>ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合深度应用 目录 第一章、ArcGIS Pro基础讲解 第二章、数据获取、整合与管理 第三章、坐标系基础与地理配准 第四章、数据编辑与查询、拓扑检查 第五章、制图基础讲解 第六章、地理处理工具…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...