函数作用域和块级作用域: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最佳实践:作用域和闭包

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱操作的探索与利用

目录 前言1 搜索&#xff08;Search&#xff09;1.1 基于关键词搜索1.2 属性搜索1.3 模式匹配 2 过滤&#xff08;Filtering&#xff09;2.1 属性过滤2.2 关系过滤 3 引导&#xff08;Guidance&#xff09;3.1 相关实体推荐3.2 路径推荐 4 合并&#xff08;Merging&#xff09;…

OpenLayers基础教程——WebGLPoints图层样式的设置方法

1、前言 前一篇博客介绍了如何在OpenLayers中使用WebGLPoints加载海量数据点的方法&#xff0c;这篇博客就来介绍一下WebGLPoints图层的样式设置问题。 2、样式运算符 在VectorLayer图层中&#xff0c;我们只需要创建一个ol.style.Style对象即可&#xff0c;WebGLPoints则不…

【c++】类和对象(三)构造函数和析构函数

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们带来类和对象重要的部分&#xff0c;构造函数和析构函数 目录 1.类的6个默认成员函数2.构造函数2.1构造函数其他特性 3.构析函数3.1特性&#xff1a;…

03课程发布模块课程预览

课程预览界面 界面原型 课程在发布前需要运营方进行审核&#xff0c;作为课程制作方即教学机构发布课程前可以通过课程预览功能查看课程详情界面&#xff0c;及时修改页面中的内容排版和违规问题 课程预览就是把课程的相关信息进行整合然后在课程预览界面进行展示&#xff0…

为jupyter安装和使用不同的python版本

安装好jupyter后&#xff0c;发现为默认的python3&#xff0c;想要切换到python3.10&#xff0c; 1.创建新环境python310 conda create -n python310 python3.10 2.进入新环境python310 conda activate python310 3.下载jupyter notebook conda install jupyter notebook…

802.1X网络访问控制协议

802.1X是一种由IEEE&#xff08;电气和电子工程师协会&#xff09;制定的网络访问控制协议&#xff0c;主要用于以太网和无线局域网&#xff08;WLAN&#xff09;中基于端口的网络接入控制。802.1X协议通过认证和授权机制&#xff0c;确保只有合法的用户和设备才能够接入网络&a…

Facebook如何使用增强技术提升广告效果?

AR in AD - case study 脸书2021年宣布了引入AR的新方法&#xff0c;以推动其应用套件中的产品发现和购买。但他们首先考虑是技术。据脸书称&#xff0c;技术一直是增强现实在其应用程序中更广泛使用的主要障碍。这就是为什么它现在正在做出改变&#xff0c;使企业主和广告商更…

OpenHarmony 源码解析之SystemUi—Statusbar(TS)

作者&#xff1a;董伟 简介 SystemUI应用是OpenHarmony中预置的系统应用&#xff0c;为用户提供系统相关信息展示及交互界面&#xff0c;包括系统状态、系统提示、系统提醒等&#xff0c;例如系统时间、电量信息。 本文主要分析batterycomponent、clockcomponent、wificompo…

2024年3月26日 十二生肖 今日运势

小运播报&#xff1a;2024年3月26日&#xff0c;星期二&#xff0c;农历二月十七 &#xff08;甲辰年丁卯月己丑日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;鸡、鼠、猴 需要注意&#xff1a;马、狗、羊 喜神方位&#xff1a;东北方 财神方位&#xff1a;…

[HGAME 2023 week2]Designer

[HGAME 2023 week2]Designer 考点&#xff1a;XSS跨站脚本攻击&#xff0c;模板注入 代码审计 function auth(req, res, next) {const token req.headers["authorization"]if (!token) {return res.redirect("/")}try {const decoded jwt.verify(token,…

登录注册界面

T1、编程设计理工超市功能菜单并完成注册和登录功能的实现。 显示完菜单后&#xff0c;提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能&#xff0c;最后提示注册/登录成功并显示注册信息/欢迎XXX登录。当用户输入其他菜…

【随笔】Git -- 基本概念和使用方式(五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

相机标定 手眼标定 网页版

欢迎使用&#xff0c;请移步ipv6 site (jah10527.github.io)

下载网页上的在线视频 网络视频 视频插件下载

只需要在浏览器上安装一个插件&#xff0c;就可以下载大部分的视频文件&#xff0c;几秒到一两个小时的视频&#xff0c;基本都不是问题。详细解决如下&#xff1a; 0、因为工作需要&#xff0c;需要获取某网站上的宣传视频&#xff0c;我像往常一样&#xff0c;查看视频的url…

C语言回顾笔记

1.变量 2.运算符 3.if判断 4.接力break 5.最大公约数 6.水仙花数 #include<stdio.h> int main(){int n;scanf("%d",&n);//根据输入的位数计算&#xff0c;如最小三位数100 int first 1;int i 1;while(i<n){first *10;i; }printf("first%d\n"…

数据分析POWER BI之power query

1.导入数据 ctrla全选--数据--获取数据--其他来源--来自表格/区域 导入数据&#xff0c;进入编辑模式 2.整理与清除 清除&#xff1a;删除所选列的非打印字符 转换--格式--清除 修整&#xff1a;删除前面和后面的空格 转换---格式---修整&#xff08;修整后前面后面的空格没有了…

代码随想录算法训练营第三十四天|1005. K次取反后最大化的数组和,135,分发糖果

1005. K 次取反后最大化的数组和 题目 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数…

选项式API和组合式API的区别

选项式(options) API 和组合式(composition) API两种不同的风格书写&#xff0c;Vue3 的组件可以使用这两种api来编写。 选项式API和组合式API的区别 选项式API 选项式 API&#xff0c;具有相同功能的放在一起&#xff0c;可以用包含多个选项的对象来描述组件的逻辑&…

500元以内的运动耳机推荐有哪些?五大倍受欢迎的机型总汇

作为一个运动爱好者&#xff0c;我始终认为一款优秀的运动耳机不仅能够带来音乐的享受&#xff0c;更能为运动增添动力&#xff0c;但市面上的运动耳机种类繁多&#xff0c;价格不一&#xff0c;如何选择一款性价比高、功能实用的运动耳机成为了许多消费者的难题&#xff0c;今…

发布文章积分自动增加

controller ApiOperation(value "添加文章")PostMapping("/addwengzhang")public String addwengzhang(RequestBody WengDto wengDto) {if (wengDto.getContent() null || wengDto.getTitle() null) {return "参数不可为空";}User user user…