【JavaScript】var, let, const区别

提出

var是ES5提出的,let和const是ES6提出的。

作用域不同

let和const具有块级作用域,var不存在块级作用域,可以跨块访问, 不能跨函数访问

// 全局
var a = 10
console.log(a) // 10const test = (c) => {var b = 20console.log(b) // 20,这个b在函数内声明console.log(c)
}test(10) // 20 10
console.log(b) // 报错,b没有被声明

什么是全局作用域、函数作用域?
在ES6之前,作用域只有两种:全局作用域和函数作用域。var声明的变量存在于这两个作用域中。
全局作用域中的对象在代码的任何地方都能访问。
函数作用域就是在函数内部定义的变量或者函数,并且定义的变量或者函数只能在函数内部被访问。而且函数执行结束之后,函数内部定义的变量会被销毁。

什么是块级作用域?
用 { } 包裹的一段代码,如函数、判断语句、循环语句、甚至单独的一个 { }:

// 函数块
function fun() {}// 判断语句块
if(true) {}// 循环语句块
while(true) {}
for(let i=0; i<10; i++) {}// 单独一个块
{}

全局属性

var是全局的,window.a
var可以重复声明变量,后声明的变量会覆盖先声明的

变量提升

var存在变量提升;let和const不存在变量提升。

什么是变量提升?
允许在变量声明之前即被访问。
在代码执行之前,把当前作用域中var声明的变量全部提到当前作用域的最前面。
只提升声明,不提升变量。

function fn(){console.log(num)var num = 10
}

相当于以下代码:

function fn(){var numconsole.log(num)//undefinedvar num = 10
}

变量num在var声明之前即被访问,变量的值为undefined。

初始值设置

在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

var a
let b
const c//错误,需要改为const c = 30

重复声明

var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历;
const和let不允许重复声明变量。

var a = 1;
var a = 2;
console.log(a);//输出2

可修改性

const声明的变量是常量,值不可修改;var和let声明的变量的值可以修改。

给全局添加属性

var声明的变量会挂载到window上;let和const声明的变量则不会。

var a = 1;
console.log('a', window.a);//a 1let b = 2;
console.log('b', window.b);//b undefinedconst c = 3;
console.log('c', window.c);//c undefined

暂时性死区

定义:let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
在代码快内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
结论:var不存在暂时性死区,let和const存在暂时性死区。

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

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

相关文章

[单master节点k8s部署]13.statefulSet

statefulSet 为每一个pod提供一个稳定的、唯一的网络标识符&#xff0c;每个 Pod 通过 PersistentVolumeClaim (PVC) 获得自己的存储。即使 Pod 被重新调度到另一个节点&#xff0c;这个 PVC 也会被重新挂载到正确的 Pod 上&#xff0c;保证存储的稳定性。 statefulset创建的p…

LeetCode-213. 打家劫舍 II【数组 动态规划】

LeetCode-213. 打家劫舍 II【数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;分三种情况&#xff0c;一&#xff1a;不考虑头尾&#xff1b;二&#xff1a;考虑头不考虑尾&#xff1b;三&#xff1a;考虑尾不考虑头。解题思路二&#xff1a;优化空间解题思路三&am…

Android笔记-adb keycode大全

使用方法 用adb发送按键事件时&#xff0c;可以使用下面表中的枚举值或者直接使用数值&#xff0c;比如 adb shell input keyevent KEYCODE_HOME 或者 adb shell input keyevent 3 下面按三种排序方法列出所有按键的 keycode&#xff0c; 分别是&#xff1a; 按功能分 按枚…

C++ 设计模式之命令模式

C 设计模式之命令模式 简介 1、命令模式 &#xff08;Command&#xff09;是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使您可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 2、…

浏览器userAgent大全及JS判断当前APP

文章目录 userAgent 检测PC/Mobile 浏览器 userAgent 大全Mobile APP userAgent 大全JS 判断当前 APP userAgent 检测 https://useragent.buyaocha.com/ PC/Mobile 浏览器 userAgent 大全 系统浏览器User-Agent字符串MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12…

vue数组套对象,在动态加入属性:属性值, 导致数据不更新

一 、案例效果 [{a: 1,b:2},{a: 1,b:2}, toggle:true]导致视图不更新且数据没有响应式。这种格式是数组套对象的&#xff0c;之后由于不想在遍历一层数据变成[{a: 1,b:2,toggle:true},{a: 1,b:2,oggle:true} ] ,就直接加在对象后面了【虽然这样写法不对&#xff0c;但是&#…

LLM端侧部署系列 | 陈天奇MLC-LLM重磅升级:基于机器学习编译的通用LLM部署引擎

引言 简介 MLCEngine的聊天功能 OpenAI风格API 云端REST API Python API iOS SDK Android SDK WebLLM SDK 小结 结构化生成 支持各种平台 优化引擎性能 总结 引言 流星透疏水&#xff0c;走月逆行云。 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&am…

如何获取泛型参数【Java】

对于一个基本的类 public class BaseDao<T>{T findOne() {return T;} }它的子类 public class StudentDao extends BaseDao<StudentDao.Student>{public static class Student{}}如何获得当前类对应的泛型参数呢&#xff1f; 方法一 JDK public static void ma…

关于onlyoffice回调函数的问题

参考文档1&#xff1a;https://api.onlyoffice.com/zh/editors/callback 在官方文档中描述的十&#xff0c;文档存储服务的回调函数&#xff0c;必须要返回 {"error": 0}表示成功&#xff0c;否则将提示错误信息。 但是经过实测&#xff0c;我们只需要正常的返回2…

力扣2874.有序三元组中的最大值 II

力扣2874.有序三元组中的最大值 II 遍历j –> 找j左边最大数 和右边最大数 class Solution {public:long long maximumTripletValue(vector<int>& nums) {int n nums.size();vector<int> suf_max(n1,0);//右边最大数for(int in-1;i>1;i--){suf_max[i…

Mysql - 数据库备份和恢复

当涉及到数据库管理时&#xff0c;数据库备份和恢复是非常关键的操作。备份可以保护数据库中的重要数据免受意外删除、数据库故障或者恶意攻击的影响。同时&#xff0c;恢复操作可以帮助我们在发生意外情况时快速恢复数据库到之前的状态。在这篇文章中&#xff0c;我们将深入探…

每日一题——Python实现PAT乙级1090 危险品装箱(举一反三+思想解读+逐步优化)4千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 题目链接&#xff1a;https://pintia.cn/problem-sets/994805260223102976/exam/problems/typ…

STL工程问题

文章目录 1. vector迭代器失效问题1.1. 情况1&#xff1a;扩容导致迭代器失效1.2. 情况2&#xff1a;删除导致迭代器失效1.3. 情况3&#xff1a;尾删导致迭代器失效 2. STL怎么做内存管理3. 如何解决哈希冲突&#xff1f;4. vector手动释放内存问题5. 对象池思想 1. vector迭代…

基于SSM的校园闲置物品交易平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的校园闲置物品交易平台,java项目…

Advanced RAG 09:『提示词压缩』技术综述

编者按&#xff1a; 如何最大限度地发挥 LLMs 的强大能力&#xff0c;同时还能控制其推理成本&#xff1f;这是当前业界研究的一个热点课题。 针对这一问题&#xff0c;本期精心选取了一篇关于"提示词压缩"(Prompt Compression)技术的综述文章。正如作者所说&#xf…

Zookeeper 四、Zookeeper应用场景

Zookeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架&#xff0c;我们可以使用它来进行分布式数据的发布与订阅。另一方面&#xff0c;通过对Zookeeper中丰富的数据节点类型进行交叉使用&#xff0c;配合Watcher事件通知机制&#xff0c;可以非常方便地构建一系列分…

八爪鱼现金流-032,给用户发邮件提示功能

每个月的 5 号、15 号、25 号的 17:30 工资日&#xff0c;给用户发送邮件&#xff0c;提示记账月报。 您也来记账一笔吧。 然后首页能看到趋势图。 八爪鱼现金流 八爪鱼

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

3072. 将元素分配到两个数组中 II Hard

给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中&a…

LeetCode 算法:二叉树的右视图 c++

原题链接&#x1f517;&#xff1a;二叉树的右视图 难度&#xff1a;中等⭐️⭐️ 题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4…