js中的作用域和作用域链,你未必能分清,用代码示例告诉你。

news2024/11/15 11:18:32

有很多小伙伴分不清二者,看了网上教程也是很迷茫,好吧让我告诉你吧。

一、作用域和作用域链

作用域是指在程序中变量和函数的可访问性和可见性范围。作用域决定了在哪些地方可以访问到变量和函数,以及在哪些地方可以对其进行修改和调用。

作用域链是指在程序中变量和函数的作用域嵌套关系。当程序中存在多个作用域时,作用域链可以帮助确定变量和函数的查找顺序。当在当前作用域无法找到变量或函数时,程序会沿着作用域链向上查找,直到找到为止。这样可以确保程序能够正确地访问和使用变量和函数。


二、二者的区分

在 JavaScript 中,作用域和作用域链也是指变量和函数的可访问性和可见性范围,以及它们的嵌套关系。但是,作用域链在 JavaScript 中是指在函数作用域中,变量和函数的查找顺序。

作用域是指变量和函数的可访问性范围,分为全局作用域和局部作用域。全局作用域中的变量和函数可以在整个程序中被访问,而局部作用域中的变量和函数只能在定义它们的函数内部被访问。

作用域链是指在函数作用域中,变量和函数的查找顺序。当在函数内部访问一个变量或函数时,JavaScript 引擎会先在当前函数的作用域中查找,如果找不到,就会沿着作用域链向上查找,直到找到为止。

因此,作用域是指变量和函数的可访问性范围,而作用域链是指在函数作用域中,变量和函数的查找顺序。


三、全局作用域和局部作用域

全局作用域和局部作用域是JavaScript中的两种作用域类型。

全局作用域是指在整个JavaScript程序中都可以访问的作用域,其中定义的变量和函数可以被程序中的任何地方访问。全局作用域中定义的变量和函数通常在程序的顶层声明,即不在任何函数内部。

局部作用域是指在函数内部定义的作用域,其中的变量和函数只能在该函数内部被访问。当在函数内部声明变量时,这些变量只在该函数内部可见,外部无法访问。

以下是一个简单的示例,演示了全局作用域和局部作用域的概念:

// 全局作用域
var globalVar = 'I am global'; // 全局变量

function outerFunction() {
  // 局部作用域
  var outerVar = 'I am local'; // 局部变量

  console.log(globalVar); // 可以访问全局变量
  console.log(outerVar); // 可以访问局部变量
}

outerFunction();

console.log(globalVar); // 可以在全局范围内访问全局变量
console.log(outerVar); // 无法在全局范围内访问局部变量,会报错

在这个示例中,globalVar 是一个全局变量,可以在整个程序中访问。而 outerVar 是在 outerFunction 函数内部声明的局部变量,只能在该函数内部访问。


四、作用域和作用域链的代码演示

当在 JavaScript 中使用作用域和作用域链时,可以通过以下示例来理解其概念:

// 全局作用域
var globalVar = 'I am global';

function outerFunction() {
  // 外部函数作用域
  var outerVar = 'I am outer';

  function innerFunction() {
    // 内部函数作用域
    var innerVar = 'I am inner';
    
    console.log(globalVar); // 可以访问全局作用域的变量
    console.log(outerVar); // 可以访问外部函数作用域的变量
    console.log(innerVar); // 可以访问当前函数作用域的变量
  }

  innerFunction();
  console.log(innerVar); // 无法访问内部函数作用域的变量,会报错
}

outerFunction();
console.log(outerVar); // 无法访问外部函数作用域的变量,会报错

在这个示例中,全局作用域中定义了一个全局变量 globalVar。然后在 outerFunction 函数中定义了一个外部函数作用域的变量 outerVar,以及一个内部函数 innerFunction,在内部函数中定义了一个内部函数作用域的变量 innerVar。

在内部函数中,可以访问到全局作用域、外部函数作用域和当前函数作用域的变量。而在外部函数和全局作用域之外,无法直接访问内部函数作用域和外部函数作用域的变量。这就是作用域链的概念。

你理解了吗?

Hi,我是贝格前端工场,10年前端和UI老司机了,持续为大家分享有价值、有见地的观点、作品、干货,欢迎评论、关注、点赞、有事请私信。

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

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

相关文章

大学生选择算法向还是嵌入式向?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 由于嵌入式的薪资待遇和…

qt把虚拟键盘部署到arm开发板上(imx6ull)

分为了qt官方配置的虚拟键盘以及各路大神自己开源的第三方键盘,我本来想尝试利用官方键盘结果一直失败,最后放弃了,后面我用的第三方键盘参考了如下文章: https://blog.csdn.net/2301_76250105/article/details/136441243 https…

ABAP 借助公司封装的钉钉URL,封装的RFC给钉钉发送消息

FUNCTION ZRFC_BC_SMSSEND_DINGTALK. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(DESTUSRID) TYPE CHAR255 *" VALUE(CONTENT) TYPE CHAR255 *&quo…

【接口测试_04课_Jsonpath断言、接口关联及加密处理】

一、Jasonpath的应用 JsonPath工具网站:JSONPath解析器 - 一个工具箱 - 好用的在线工具都在这里! 1、JSONPath的手写与获取 手写JSONPath 1、 $ (英文美元符号)代表外层的{} . (英文句号)表示当前…

4K型护套连接器与喇叭口替换插座

4K型护套连接器概述 4K型护套连接器作为煤矿一款关键的电气连接产品,一般安标认证型号包含:LCFB-4、LCFB-6、LCYB-8、LCYB-4、LCYB-8。根据不同的厂家也会有不同订货型号ZE0703-09/DLJ0601/conmN/4c等 4K型护套连接器是一种专为煤矿、非煤矿、石油化工等…

N的阶乘(高精度)

目录 题目描述 输入格式 输出格式 样例输入 样例输出 思路 参考代码 题目描述 输入正整数n,输出n! 输入格式 一个正整数n,n 3000 输出格式 输出n! 样例输入 3 样例输出 9 思路 主要就是高精度乘法的模版&#x…

Docker-镜像迁移的三种方式=>备份恢复公有仓库私有仓库

制作好的镜像要被别人使用,有三种方式: 1.先备份镜像,别人通过u盘或者其它方式拷贝后,再恢复镜像,这种方式比较麻烦 2.将制作的镜像上传到公共镜像仓库,被别人拉取后使用,但可能存在网络不通畅或…

Gitlab不允许使用ssh拉取代码的解决方案

一、起因 之前一直是用ssh进行代码拉取,后来公司搞网安行动,不允许ssh进行连接拉取代码了 因为我是用shell写了个小型的CI/CD,部署前端项目用于后端联调的,因此在自动部署时,不方便人机交互,所以需要自动填充账密。 …

Kibana创建ElasticSearch 用户角色

文章目录 1, ES 权限参考2, 某应用的管理员权限:可以open/close/delete/cat/read/write 索引3, 某应用的读写权限:可以cat/read/write 索引 (不能删除索引或数据)4, 某应用的只读权限 1, ES 权限参考 https://www.elastic.co/gui…

Android 14 - 绘制体系 - 概览

从Android 12开始,Android的绘制系统有结构性变化, 在绘制的生产消费者模式中,新增BLASTBufferQueue,客户端进程自行进行queue的生产和消费,随后通过Transation提交到SurfaceFlinger,如此可以使得各进程将缓…

排序算法——上

一、冒泡排序: 1、冒泡排序算法的思想 我们从左边开始把相邻的两个数两两做比较,当一个元素大于右侧与它相邻的元素时,交换它们之间位置;反之,它们之间的位置不发生变化。冒泡排序是一种稳定的排序算法。 2、代码实现…

智能单款计划助力品牌利润增长

零售品牌若要在激烈的市场竞争中胜出,季中单款的管理无疑是商品生命周期管理的核心环节之一。而单款计划的制定,首先依赖于对爆款、平销及滞销产品的敏锐洞察。一个利润现象不得不引起我们的关注:爆款产品的销售,往往成为拉动品牌…

「实用推荐」如何为桌面 移动跨平台应用选择UI框架/APP架构?

DevExpress .NET MAUI UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该库包括数据网格、图表、日程、数据编辑器、CollectionView和选项卡组件。 获取DevExpress .NET MAUI最新正式版下载(Q技术交流:532598169) “一次编写&#…

03 FreeRTOS 同步互斥与通信

1、同步与互斥 一句话理解同步与互斥:我等你用完厕所,我再用厕所。 什么叫同步?就是:哎哎哎,我正在用厕所,你等会。 什么叫互斥?就是:哎哎哎,我正在用厕所,你…

笔试强训week6

day1 Q1 难度⭐⭐ 小红的口罩_牛客小白月赛41 (nowcoder.com) 题目: 疫情来了,小红网购了 n 个口罩。 众所周知,戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为 ai​。 小红有时候会将口罩重复使用(注:…

什么是死锁,如何解决?

一、问题解析 死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些…

网上有哪些正规的兼职副业赚钱平台?分享10类正规的网上兼职赚钱平台,让你在家也能赚钱~

在如今的快节奏社会中,越来越多的人开始寻求兼职副业来增加收入。而随着互联网的普及,网上赚钱平台成为了许多人选择的方式之一。然而,面对众多的网上赚钱平台,我们要如何辨别哪些是正规可靠的呢?在本文中,…

解读:Mint Blockchain 最新路线图,释放 NFT 生态重磅发展计划

作者:Mint Ecosystem 关于 Mint Blockchain:Mint Blockchain 是一个以太坊原生 L2 网络,核心是发展 NFT 生态和产业,促进 NFT 领域的 Mass Adoption 产生。MintCore 团队致力于将 Mint Blockchain 打造成一个围绕服务 NFT 资产的…

6万转高速主轴电机哪个品牌好?

近年来,随着全球科技的迅猛发展,各个工业领域对高精密零件加工的需求日益旺盛,特别是在医疗、航天航空、通讯技术等领域,对工件的精密性要求达到了前所未有的高度。在这样的背景下,高转速,高精密的高速电主…

yolo 算法 易主

标题:YOLOv10: Real-Time End-to-End Object Detection 论文:https://arxiv.org/pdf/2405.14458ethttps%3A//arxiv.org/pdf/2405.14458.zhihu.com/?targethttps%3A//arxiv.org/pdf/2405.14458 源码:https://github.com/THU-MIG/yolov10 分析…