let、var、const 的区别 --js面试题

作用域

ES5中的作用域有:全局作用域、函数作用域,ES6中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的 { } 也属于块作用域。

var

1.没有块级作用域的概念,但具有函数全局作用域、函数作用域的概念

{var a = 10
}
console.log("输出", a) //输出10var a = 10
function test() {console.log("输出", 10) //输出 10var a = 10
}
console.log(a) //a is not defined

2.存在变量提升
变量提升(hoisting)是JavaScript中的一种行为,它使得变量和函数声明在代码执行前被提升至当前作用域的顶部。然而,变量的初始化并不会被提升

console.log(x); // 输出: undefined
var x = 5;

3.全局作用域用 var 声明的变量会挂载到 window 对象下,let 和const不会,node环境中都不会挂载到global对象
在这里插入图片描述
4.同一作用域中允许重复声明,以最后一次声明为准

var a = 10;
var a = 20;
console.log(a);  //20checkscope();
function checkscope(){var b = 10;var b = 20;console.log(b);  //20
}

let

1.有块级作用域的概念

{let a = 10;
}
console.log(a);  //ReferenceError: a is not defined

2.不存在变量提升且具有暂时性死区

console.log(a); //ReferenceError: Cannot access 'a' before initialization
let a = 10;

暂时性死区(Temporal Dead Zone,简称 TDZ)是ES6(ECMAScript 2015)引入的新概念,主要与let和const声明有关。在TDZ中,变量在声明之前是不可访问的,这有助于避免某些常见的编程陷阱和错误。
TDZ 的工作原理:
在使用let或const声明变量的作用域中,从作用域的开始直到变量声明语句之前,变量处于暂时性死区。在TDZ中试图访问变量会导致ReferenceError,因为此时变量尚未正式声明。

TDZ 的工作原理
在使用let或const声明变量的作用域中,从作用域的开始直到变量声明语句之前,变量处于暂时性死区。在TDZ中试图访问变量会导致ReferenceError,因为此时变量尚未正式声明。
3.同一块作用域中不允许重复声明

{let A;var A;  //SyntaxError: Identifier 'A' has already been declared
}
{var A;let A;  //SyntaxError: Identifier 'A' has already been declared
}
{let A;let A;  //SyntaxError: Identifier 'A' has already been declared
}

const

1.必须立即初始化,不能留到以后赋值

const a; // SyntaxError: Missing initializer in const declaration } 

2.常量的值不能改变

{const a = 10; a = 20; // TypeError: Assignment to constant variable
}

但是,对于使用const声明的数组或对象,其内部的属性是可以改变的

const a = [10, 20]
a[1] = 2
console.log(a)const b = {'name': '张三'
}b.name = '李四'
console.log(b)/*
输出
[ 10, 2 ]
{ name: '李四' }
*/

3.不存在变量提升且具有暂时性死区

console.log(y); // 输出: ReferenceError: y is not defined
const y = 10;

面试真题

  • let const var 的区别?什么是块级作用域?如何用?

参考答案:

  1. var 定义的变量,没有块级作用域的概念,具有变量提升,可重复声明。
  2. let 定义的变量,只能在块作用域里访问,无变量提升,不可以重复声明,具有暂时性死区。
  3. const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改,无变量提升,不可以重复声明,具有暂时性死区。

最初在 JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。

ES6 中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的 { } 也属于块作用域。

在以前没有块作用域的时候,在 if 或者 for 循环中声明的变量会泄露成全局变量,其次就是 { } 中的内层变量可能会覆盖外层变量。块级作用域的出现解决了这些问题。

总结

主要就是4个方面
1.是否有块级作用域
2.是否变量提示生
3.是否有暂时性死区
4.是否可重复声明

后续增加

  1. JavaScript为什么要进行变量提升,它导致了什么问题
  2. let var 在闭包中应用

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

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

相关文章

别再只知道埋头苦学python了!!学了python后月入1w不在话下,不准你还不知道!!!

在Python接单的过程中,掌握一些技巧、注意相关事项以及选择合适的接单平台是非常重要的 一、Python接单要注意哪些 报酬问题:在接单前,务必明确客户所说的报酬是税前还是税后,以避免后期产生纠纷。时间管理:不要与客户…

Nginx 如何处理 WebSocket 连接?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 文章目录 Nginx 如何处理 WebSocket 连接?一、WebSocket 连接简介二、Nginx 处理 WebSocket 连接的基本原理三、配置 Nginx 支持 WebSocket 连接四、Nginx 中的…

【启明智显分享】甲醛检测仪HMI方案:ESP32-S3方案4.3寸触摸串口屏,RS485、WIFI/蓝牙可选

今年,“串串房”一词频繁引发广大网友关注。“串串房”,也被称为“陷阱房”“贩子房”——炒房客以低价收购旧房子或者毛坯房,用极度节省成本的方式对房子进行装修,之后作为精修房高价租售,因甲醛等有害物质含量极高&a…

“从爱好者到职业画师:一位AI绘画践行者的赚钱实战秘籍“

🎨 【引子:AI绘画:艺术与科技的交汇】 在数字化浪潮席卷全球的今天,人工智能技术以其颠覆性的力量,正悄然改写着艺术创作的传统版图。当AI与绘画碰撞交融,诞生出一种全新的艺术形式——AI绘画。它不仅是科…

别只盯着苹果了,华为Mate70也有AI技术,听说效果让人直接惊呼

随着人工智能技术的不断进步,智能手机行业也迎来了前所未有的变革。苹果、三星等国际知名手机厂商纷纷在新品发布会上重点展示其手机的AI技术,而华为作为中国科技的领军企业,其在AI领域的成就同样不容小觑。 华为Mate系列作为其旗舰系列&…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

计算机网络基础:3.DNS服务器、域名分类

一、DNS服务器 DNS服务器在网络中的作用类似于餐厅中的“顾客座位对照表”,它帮助前台(路由器)将顾客(用户)的请求转发到正确的餐桌(目标设备)。 (1)概念与原理 DNS的基本概念 DNS&…

Gson的基本使用:解析Json格式数据 序列化与反序列化

目录 一,Gson和Json 1,Gson 2,Json 3,Gson处理对象的几个重要点 4,序列化和反序列化 二,Gson的使用 1,Gson的创建 2,简单对象序列化 3,对象序列化,格…

Wordpress安装到win10(2024年7月)

目录 1.wordpress介绍 2下载应用 2.1.wordpress 2.2XAMPP 2.3 PHPmyadmin 3.配置应用 3.1XAMPP进程 3.2 文件配置 3.3 phpmyadmin配置 4.配置网页 4.1 数据库创建 4.2 安装wordpress 5.进入面板 6.总结 1.wordpress介绍 WordPress是一个开源内容管理系统&#xff0…

Java台球厅助教教练预约上门到店系统源码

🎱一杆在手,天下我有!台球助教教练预约系统,让球技飙升不是梦🚀 🎯【开篇:台球爱好者的福音来啦!】🎯 还在为找不到合适的台球教练而烦恼吗?或是想要在家就…

社交圈子聊天交友系统搭建社交app开发:陌生交友发布动态圈子单聊打招呼群聊app介绍

系统概述 社交圈子部天交友系统是一个集成即时通讯、社区互动、用户管理等功能的在线社交平台。它支持用户创建个人资料,加入兴趣围子,通过文字、图片、语音、视频等多种方式进行交流,满足用户在不同场景下的社交需求 核心功能 -,…

Matlab编程资源库(1)选择结构

一、if语句 在 MATLAB 中, if 语句有 3 种格式。 (1) 单分支 if 语句: if 条件 语句组 end 当条件成立时,则执行语句组,执行完之后, 继续执行 if 语句的后继语句,若条件不成 立,则直接执…

Qt源码交叉编译带openssl的Qt版本

一.背景 近期项目由于对接的后台服务是https的,之前交叉编译的Qt是不带openssl的,为了能支持https,必须要重新编译Qt。 二.环境 环境准备: Ubuntu版本 :18.04; openssl 版本:1.1.1.g&#xff1b…

C/C++的堆栈内存分配详解

在C/C编程中,内存管理是至关重要的一个方面。理解内存的分配方式有助于编写高效、可靠的程序,C/C主要使用两种内存分配方式:堆(heap)和栈(stack)。这两者在管理方式、性能和使用场景上都有显著区…

python计算PMF、PDF、CDF、PPF、KDE介绍

目录 1. 总括1.1 绘图示例1.2 概念介绍1. PMF (Probability Mass Function)2. PDF (Probability Density Function)3. CDF (Cumulative Distribution Function)4. PPF (Percent Point Function)5. KDE (Kernel Density Estimation)1. 总括 1.1 绘图示例 上图展示了PMF、PDF、C…

物联网精密空调监控指标解读:松越_TCP7022EX_精密空调

监控易是一款专业的IT和物联网设备监控软件,能够实时监控各类IT资源和物联网设备的运行状态,确保系统的稳定运行。在物联网精密空调领域,监控易对松越_TCP7022EX_精密空调进行了全面的监控,以下是对其监控指标的详细解读。 监控指…

天工Godwork AT 5.2.6 GodWork2D 2.1.5 GodWork EOS 2.1实景三维建模软件

天工Godwork AT 5.2.6/GodWork2D 2.1.5/GodWork EOS 2.1实景三维建模软件 获取安装包联系邮箱:2895356150qq.com 本介绍用于学习使用,如有侵权请您联系删除! 1.自主研发的平差技术,平差模块不依赖PATB、Bingo等国外技术 2.采用特征匹配&…

华媒舍:6个媒体宣发套餐,快速突破传播界限

在当今信息爆炸的社会中,有效地传播自己的信息变得愈发困难。特别是对于媒体宣发来说,如何在市场竞争激烈的情况下突破传播界限,让自己的消息传达给更多的人,这是每个企业和个人都面临的难题。 为了解决这个问题,我们推…

libtins初探-抓包嗅探

libtin 一、概述1. 可移植性2. 特性 二、基础知识1. PDU2. 地址类3. 地址范围类4. 网络接口5. 写pcap文件 三、嗅探1.嗅探基础2. 嗅探器配置3. 循环嗅探4. 使用迭代器嗅探6. 包对象7. 读取pcap文件8. 包的解析 四、发送包1. 发送网络层pdu2. 发送链路层pdu3. 发送和接收响应校验…

【QT】常用控件(概述、QWidget核心属性、按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)

一、控件概述 Widget 是 Qt 中的核心概念,英文原义是 “小部件”,此处也把它翻译为 “控件”。控件是构成一个图形化界面的基本要素。 像上述示例中的按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框都可以称为 “控件”。 Qt 作为…