函数作用域和块级作用域:JavaScript中的变量作用域解析

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1️⃣ 函数作用域
      • 2️⃣ 块级作用域
      • 3️⃣ 作用域链
    • 总结:
    • 参考资料:

摘要:

本文将介绍JavaScript中的函数作用域和块级作用域的概念、区别以及应用场景,帮助您了解如何在JavaScript中正确使用变量作用域,以提高代码的可读性和可维护性。

引言:

🌐 在JavaScript编程中,理解变量作用域对于编写清晰、高效的代码至关重要。JavaScript支持两种主要的作用域:函数作用域和块级作用域。接下来,让我们一起来探索这两种作用域的奥秘。

正文:

1️⃣ 函数作用域

  • 函数作用域:在JavaScript中,函数作用域指的是在函数内部定义的变量。这些变量在函数内部可以被访问,但在函数外部不可见。
  • 应用场景:函数作用域适用于在函数内部定义变量,以避免全局变量的污染,提高代码的可维护性。

函数作用域是指在函数内部定义的变量可以在函数内部被访问,但不能在函数外部被访问。以下是一个简单的函数作用域的代码案例:

function myFunction() {var myVar = "Hello, World!";console.log(myVar); // 输出 "Hello, World!"
}console.log(myVar); // 报错:myVar is not defined

在这个示例中,我们在 myFunction 函数内部定义了一个变量 myVar,并将其输出到控制台。当我们尝试在函数外部访问 myVar 时,浏览器会报错,提示 myVar is not defined。这是因为函数内部的变量具有局部作用域,只能在函数内部被访问,不能在函数外部被访问。

2️⃣ 块级作用域

  • 块级作用域:在ES6(ECMAScript 2015)中引入了块级作用域的概念,通过let和const声明在代码块内部定义的变量。
  • 应用场景:块级作用域适用于在代码块内部定义变量,以提高代码的可读性和可维护性。

块级作用域是指在指定代码块(如循环、条件语句等)内部定义的变量只能在代码块内部被访问,不能在代码块外部被访问。以下是一个简单的块级作用域的代码案例:

for (var i = 0; i < 5; i++) {console.log("Block scope: " + i); // 输出 5 次 "Block scope: i"
}console.log("Global scope: " + i); // 报错:i is not defined

在这个示例中,我们在 for 循环内部定义了一个变量 i,并将其输出到控制台。当我们尝试在循环外部访问 i 时,浏览器会报错,提示 i is not defined。这是因为循环内部的变量具有块级作用域,只能在循环内部被访问,不能在循环外部被访问。

3️⃣ 作用域链

  • 在JavaScript中,当访问一个变量时,首先在当前作用域中查找,如果没有找到,则继续在上级作用域中查找,直到找到全局作用域。这种机制称为作用域链。

作用域链是指当一个变量在当前作用域中找不到定义时,会依次向上级作用域查找,直到找到该变量或到达全局作用域。以下是一个简单的作用域链的代码案例:

var a = 10;function myFunction() {var a = 20;console.log(a); // 输出 20
}myFunction();
console.log(a); // 输出 10

在这个示例中,我们首先在全局作用域中定义了一个变量 a,并将其值设置为 10。然后,我们在 myFunction 函数内部重新定义了一个变量 a,并将其值设置为 20。当我们第一次在 myFunction 函数内部访问 a 时,由于函数内部变量具有局部作用域,所以会输出 20。当我们第二次在全局作用域中访问 a 时,由于全局作用域中的 a 在函数内部被重新定义了,所以会输出 10。

总结:

🎉 理解JavaScript中的函数作用域和块级作用域对于编写清晰、高效的代码至关重要。通过正确使用这两种作用域,我们可以提高代码的可读性和可维护性。

参考资料:

  • JavaScript作用域和作用域链教程
  • ES6块级作用域教程
  • JavaScript最佳实践:作用域和闭包

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

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

相关文章

tabs自定义样式

使用el-tabs 去修改样式的话比较麻烦&#xff0c;索性直接用div来制作。 <div class"contain"><div class"tab_wrap"><div :class"[skew, first, active 1 ? isActive: ]" click"tabClick(1)"><span class&quo…

Linux(Centos)安装mysql 8 并且使用systemctl管理服务

1.下载mysql包 地址 MySQL :: Download MySQL Community Server (Archived Versions) 注&#xff1a;下载我圈住的减压之后里面会有tar.gz 再次减压才会是软件主体 2.安装和准备 yum -y install numactl 安装numactl tar -xvf mysql-8.0.30-el7-x86_64.tar 拆分 …

C语言操作符和数据类型的存储详解

CSDN成就一亿技术人 目录​​​​​​​ 一.操作符 一.算数操作符&#xff1a; 二.位移操作符&#xff1a; 三.位操作符&#xff1a; 四.赋值操作符&#xff1a; 五.单目操作符&#xff1a; 六.关系操作符&#xff1a; 七.逻辑操作符&#xff1a; 八.条件操作符&…

Docker 笔记(七)--打包软件生成镜像

目录 1. 背景2. 参考3. 文档3.1 使用docker container commit命令构建镜像3.1.1 [Docker官方文档-docker container commit](https://docs.docker.com/reference/cli/docker/container/commit/)Description&#xff08;概述&#xff09;Options&#xff08;选项&#xff09;Exa…

Golang案例开发之gopacket抓包三次握手四次分手(3)

文章目录 前言一、理论知识三次握手四次分手二、代码实践1.模拟客户端和服务器端2.三次握手代码3.四次分手代码验证代码完整代码总结前言 TCP通讯的三次握手和四次分手,有很多文章都在介绍了,当我们了解了gopacket这个工具的时候,我们当然是用代码实践一下,我们的理论。本…

图论基础|695. 岛屿的最大面积、1020. 飞地的数量、130. 被围绕的区域

695. 岛屿的最大面积 力扣题目链接(opens new window) 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff0…

何为布控球?布控球的分类对比

主要的分类有&#xff1a; 根据内部的主控板卡的系统分类&#xff0c;典型的是基于海思芯片的嵌入式LINUX系统的&#xff0c;一般出国标GB28181&#xff0c;另外一种是剑走偏锋的安卓系统的&#xff0c;需要把球机的输出YUV转换为UVC接入安卓主板&#xff0c;作为外接USB摄像头…

FreeRTOS从代码层面进行原理分析(1 任务的建立)

FreeRTOS_分析 FreeRTOS 是一个开源的实时操作系统。可以在很的低内存使用的情况下运行在单片机上&#xff0c;使得单片机可以并发(虽然某一时刻还是只有一个任务运行) 的运行程序。关于一些 FreeRTOS 优缺点的介绍文章很多&#xff0c;这里就不再赘述直接深入代码探究原理。 …

vscode用SSH远程开发c语言

vscode配置远程 这里我使用虚拟机进行展示&#xff0c;首先需要你的虚拟机安装好ssh 没安装好就执行下面的命令安装并开启服务 sudo apt-get install ssh sudo service ssh start ps -e | grep sshvscode安装 remote-ssh扩展 点击左下角的远程连接&#xff0c;我这里已经连接…

mysql 存储引擎 基本介绍

目录 一 存储引擎概念介绍 &#xff08;一&#xff09;存储引擎概念 &#xff08;二&#xff09;MySQL常用的存储引擎 &#xff08;三&#xff09;存储引擎运作方式 二 MyISAM 存储引擎介绍 &#xff08;一&#xff09; MyISAM 存储引擎特点 1&#xff0c;不支持…

8.测试教程-自动化测试selenium-3

文章目录 1.unittest框架解析2.批量执行脚本2.1构建测试套件2.2用例的执行顺序2.3忽略用例执行 3.unittest断言4.HTML报告生成5.异常捕捉与错误截图6.数据驱动 大家好&#xff0c;我是晓星航。今天为大家带来的是 自动化测试selenium第三节 相关的讲解&#xff01;&#x1f600…

四、Elasticsearch 进阶

自定义目录 4.1 核心概念4.1.1 索引&#xff08;Index&#xff09;4.1.2 类型&#xff08;Type&#xff09;4.1.3 文档&#xff08;Document&#xff09;4.1.3 字段&#xff08;Field&#xff09;4.1.5 映射&#xff08;Mapping&#xff09;4.1.6 分片&#xff08;Shards&#…

可视化技术干货:坐标系扫盲—图表呈现的核心,有点难懂,慢慢看

hello&#xff0c;我是贝格前端工场&#xff0c;本篇文章开始分享可视化干货技术&#xff0c;力争用深入浅出的语言讲明白坐标系&#xff0c;并附大量图表案例。欢迎老铁们关注转发&#xff0c;如有项目定制需求可以私信我们。 一、什么是坐标系 在可视化设计中&#xff0c;坐…

【Linux】进程地址空间详解

前言 在我们学习C语言或者C时肯定都听过老师讲过地址的概念而且老师肯定还会讲栈区、堆区等区域的概念&#xff0c;那么这个地址是指的物理内存地址吗&#xff1f;这里这些区域又是如何划分的呢&#xff1f; 我们在使用C语言的malloc或者C的new函数开辟空间时&#xff0c;开辟…

Spring Cloud三:API网关深入探索与实战应用

Spring Cloud一&#xff1a;Spring Cloud 简介 Spring Cloud二&#xff1a;核心组件解析 一、服务发现与动态路由 在微服务架构中&#xff0c;服务的动态注册与发现是一个核心功能。API网关可以与服务注册中心&#xff08;如Eureka、Consul等&#xff09;集成&#xff0c;动态…

C# 将 Word 转文本存储到数据库并进行管理

目录 功能需求 范例运行环境 设计数据表 关键代码 组件库引入 Word文件内容转文本 上传及保存举例 得到文件Byte[]数据方法 查询并下载Word文件 总结 功能需求 将 WORD 文件的二进制信息存储到数据库里&#xff0c;即方便了统一管理文件&#xff0c;又可以实行权限控…

安装IK分词器 + 扩展词典配置 + 停用词典配置

安装IK分词器 1.在线安装ik插件&#xff08;较慢&#xff09; # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…

算法---动态规划

动态规划 1.前言2. 示例 - 第N个泰波那契数2.1 算法原理&#xff08;重点&#xff09;2.2 代码 3. 总结解题思路 1.前言 哪些情况下会用到动态规划&#xff1a; 1.最优化问题&#xff1a;当需要求解最大值或最小值的问题时&#xff0c;可以考虑使用动态规划。例如&#xff0c…

[C语言]——内存函数

目录 一.memcpy使用和模拟实现&#xff08;内存拷贝&#xff09; 二.memmove 使用和模拟实现 三.memset 函数的使用&#xff08;内存设置&#xff09; 四.memcmp 函数的使用 C语言中规定&#xff1a; memcpy拷贝的就是不重叠的内存memmove拷贝的就是重叠的内存但是在VS202…

SecureCRT:高效安全的远程连接工具

SecureCRT是一款功能强大的终端仿真工具&#xff0c;主要用于连接和运行包括Windows、UNIX和VMS在内的远程系统。它支持多种协议&#xff0c;如SSH1、SSH2、Telnet、SFTP、Rlogin、Serial、SCP等&#xff0c;确保用户与目标设备之间的通信安全&#xff0c;并防止网络攻击和窥探…