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

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

一、作用域和作用域链

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

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


二、二者的区分

在 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老司机了,持续为大家分享有价值、有见地的观点、作品、干货,欢迎评论、关注、点赞、有事请私信。

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

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

相关文章

韩顺平0基础学java——第12天

p250-263 this细节 4的补充:意思是不能在成员方法里通过this调用构造器。 补充 引用类型(如数组)可以是null,相当于记了个名字,还没有开空间。如果数组是{},则是开了空间,没有放元素进去。 …

Text Control 控件 中 Service Pack 3:MailMerge 支持 SVG 图像

图像的合并方式与报告模板中的合并字段相同。占位符在设计时添加,并与文件、数据库或内存中的数据合并。可以将图像对象添加到具有指定名称的模板中。数据列必须包含字节数组形式的二进制图像数据、System.Drawing.Image 类型的对象、文件名、十六进制或 Base64 编码…

npm install node-sass 安装失败的解决方案:利用国内镜像加速安装

在开发前端项目时,使用Sass作为CSS预处理器是很多开发者的选择。然而,在通过npm安装其Node.js绑定库node-sass时,一些开发者可能会遇到安装失败的问题,尤其是网络原因导致的下载缓慢或中断。本文将指导你如何通过更换为国内镜像源…

其二:使用递归法实现二分搜索

开篇 本文主要是利用递归法来实现一个简单的二分搜索程序。题目来源是《编程珠玑》第4章课后习题3。 问题概要 编写并验证一个递归的二分搜索程序, 并返回t在数组x[0…n-1]中第一次出现的位置。 思路分析 本题的思路与第一版相似,不过不同的是,为确保返回…

全屏后 element-ui 组件不显示

文章目录 问题分析ElementUI 解决方案ElementPlus 解决方案 注意 问题 上篇我们说到如何 将 DIV 全屏展示 在使用将页面中指定的 DIV 全屏展示后,出现全屏后 element-ui 组件不显示,全屏后展示的提示信息是没有的,如下如所示: 全…

C语言之指针详解(5)(含有易错笔试题)

文章目录 一、sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 二、数组和指针笔试题2.1 一维数组2.2 字符数组2.3 二维数组 三、指针运算笔试题3.1 题目13.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 一、sizeof和strlen的对比 有一个很神…

AS加密技术的实战应用与解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、AS加密技术简介 二、AS加密技术的实现过程 1. 生成公钥和私钥 2. 使用公钥加密数据 …

C++ day1 作业练习

整理思维导图 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream> #include <cstring>using namespace std; namespace my_space {string s1; }void show() {cout<…

基于springboot的论坛管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的论坛管理系统3拥有两种角色 管理员&#xff1a;用户管理、公告管理、帖子管理、分类管理、留言管理、系统管理等 用户&#xff1a;登录注册、查看发布帖子等 1.1 背景…

OM电商系统asp.net

OM电商系统&#xff0c;可以让顾客全面了解商品的详细信息&#xff0c;消除网上购物的信息不对称问题。通过商品分类来组织众多的商品&#xff0c;方便顾客找到所需要的商品。提供客服顾客互动机制&#xff0c;提高顾客的参与度。通过设计合理的订单处理流程&#xff0c;提高顾…

YOLOv10介绍与推理--图片和视频演示(附源码)

导 读 本文主要对YOLOv10做简单介绍并给出推理图片和视频的步骤演示。 YOLOv10简介 YOLOv10是清华大学的研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑…

JavaEE---多线程进阶之JUC的常见类

JUC(java.util.conccurrent) : concurrent(并发)是多线程相关的组件 Callable接口 也是一种创建线程的方式,适用于想让某个线程执行逻辑后,返回一个结果 相比之下Runnable不关注结果 改进 以下是Callable的基本使用方法 运行结果: ReentrantLock 信号量Semaphore 也就…

基于PostGIS的mvt动态矢量切片的后台地图服务和前端调用

目录 一、背景 二、矢量切片 三、Mapbox的矢量切片格式 四、PostGIS生成矢量切片 ST_AsMVT: ST_AsMVTGeom: 五、导入试验数据 六、编写PostGIS函数 七:Java后端实现 八、Openlayers前端调用 一、背景 矢量切片技术目前已成为互联网地图的主流技术,无论是Mapbox还…

ChatGPT Mac客户端 下载安装教程(免费 不限次数使用 还支持语音聊天)

ChatGPT Mac客户端 下载安装教程&#xff08;免费 不限次数使用 还支持语音聊天&#xff09; 原文链接&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139248625 免费 不限次数使用 还支持语音聊天

构建智慧社区便民服务中心系统的技术架构与未来发展

随着城市化进程的不断推进&#xff0c;人们对便捷高效的生活服务需求日益增长。而智慧便民服务中心作为城市公共服务系统的重要组成部分&#xff0c;其系统架构设计和技术支持显得尤为关键。本文将探讨智慧便民服务中心系统的技术架构设计&#xff0c;以及未来发展方向&#xf…

智能SQL代码生成器,开发者的得力助手

&#x1f3e1; 博客首页&#xff1a;IT 派同学 ⛳️ 欢迎关注 &#x1f433; 点赞 &#x1f392; 收藏 ✏️ 留言 &#x1f3a2; 本文由 IT 派同学原创编撰 &#x1f6a7; 系列专栏&#xff1a;《开源专栏》 &#x1f388; 本系列主要输出作者自创的开源项目 &#x1f517; 作品…

软考 系统架构设计师系列知识点之SOME/IP与DDS(2)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之SOME/IP与DDS&#xff08;1&#xff09; 本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…

【VTKExamples::Utilities】第六期 DataAnimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例DataAnimation,并解析接口vtkProgrammableFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…

1分钟快速掌握JSON格式

文章目录 先说理论代码举例对象型数组型总结 先说理论 下面是JSON的几种简单数据类型: 数据类型描述数字型JavaScript中的双进度浮点类型&#xff0c;通常根据具体情况定义&#xff0c;这里是没有特殊的整形的。字符串型带双引号的Unicode&#xff0c;带反斜杠转义布尔型true…

Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程

《渡鸦2》&#xff08;Raven 2&#xff09;是由韩国开发的一款大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;类型的手游&#xff0c;作为前作《Raven》的续集&#xff0c;继承并发展了其黑暗奇幻世界观&#xff0c;同时在游戏设计和内容上进行了大量创新。游戏预计于…