js基础-作用域与作用域链

news2024/11/13 10:03:20

什么是作用域?

简单说就是在代码中定义的变量或者函数能起作用的范围       

什么是作用域链?

简单说就是JavaScript 在执行时查找变量的过程,它按照从当前作用域到全局作用域的顺序逐层向上搜索,直到找到变量或到达作用域的顶端。

详细说明:

首先说明一下函数本身就是一个对象,函数定义的时候它有一些自带的属性,比如 arguments、caller、length、name、prototype、proto、[[FunctionLocation]]、[[scope]]。其中scope是一个隐式属性,里面存的是执行期上下文的集合【其实这个集合成链式结构,就是作用域链】。那什么是执行期上下文呢?执行期上下文就是当函数执行时,会创建一个执行期上下文的内部对象。而且执行期上下文是独一无二的,每次调用函数都会创建一个新的执行期上下文。函数执行完成之后,他所产生的执行期上下文被销毁。

举例说明:

function a(){
    function b(){
        var bb = 123
    }
    var aa = 234
    b()
}
var glob = 100
a()

当a被定义的时候,a会发生下面这种情况。a的[[scope]]属性中存储了全局执行期上下文

当a被调用之后,a会创建一个属于自己的执行期上下文。当访问一个变量的时候,会沿着作用域链从顶端往下查找,比如在a函数中访问glob变量,就会现在a的AO对象中查找,如果没有就继续向下查找GO对象。

当b函数被定义的时候,b在a函数中定义,他会直接使用a的作用域

当b被执行的时候,会创建他自己的执行上下文。

其中b的作用域集合1位置存储的AO对象就是a的AO对象,他们俩是同一个对象。这就跟我们函数里面嵌套函数,内层函数可以访问外层函数里的变量。其中他们访问的这个变量是同一个。

关于结束:

b执行完之后会销毁其自己的AO对象,相当于把0位置的指针指向清除了。那么a函数执行完呢?同理,但是a的AO对象中存储了b函数,那么就相当于把b函数也直接消除了,等下次调用时会重新创建。

这样解释应该清楚了解作用域链与作用域了。希望大家可以指正错误的地方,共同进步~

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

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

相关文章

C#进阶-轻量级ORM框架Dapper的使用教程与原理详解

本文详细介绍了Dapper在C#中的使用方法,包括Dapper的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用,并通过实例讲解了如何在项目中集成和使用Dapper。Dapper以其高效的性能和简洁的API受到开发者的青睐,适用于各种数据库操作需…

基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

怎么智能化管理公司众多电脑?公司电脑太多怎么管控!智慧运维,精准管控的它来啦!

俗语称:“团结则强,分散则弱;集腋成裘,聚沙成塔。” 面对公司里如繁星般的电脑大军,你是否曾感到管理无力,仿佛在与一群“不羁的野马”较劲?别担心,智慧运维的浪潮已经席卷而来&…

Mybatis学习(3)

目录 一、JDBC vs Mybatis 二、Mybatis Plugin 三、Dao接口和xml文件的sql如何建立关联 四、Mybatis如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 五、动态SQL 六、一级缓存和二级缓存 七、接口绑定的实现 八、Mybatis vs Hiberna…

Mybatis的注解开发学习笔记

学习视频:5001 Select注解_哔哩哔哩_bilibili~5009 案例:基于MyBatis注解的学生管理程序_哔哩哔哩_bilibili 目录 1.基于注解的单表增删改查 1.1Select注解 1.2Insert注解 1.3Update注解 1.4Delete注解 1.5Param注解 2.基于注解的关联查询 2.1一对一查询 2.2…

[Meachines] [Easy] nibbles Nibbleblog-Upload

信息收集 IP AddressOpening Ports10.10.10.75TCP:22,80 $ nmap -p- 10.10.10.75 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 c4:f8:ad:e8:f8:04:…

实践致知第17享:电脑忽然黑屏的常见原因及处理方法

一、背景需求 小姑电话说:最近,电脑忽然就黑屏了(如下图所示),但是等待几十秒甚至一分钟,电脑就能自然恢复了,这种状况一天能出现三四次,怎么办? 二、分析诊断 电脑黑屏…

C++从入门到起飞之——string类用法 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1. 为什么学习string类? 1.1 C语言中的字符串 1.2 两个面试题(先不做讲解) 2. 标准库中…

IMYAI智能助手介绍:全能AI工具箱,AI爱好者AIGC系统的首选。

IMYAI系统官方网站:https://new.imyai.top 引言: IMYAI系统是一款集多种先进AI技术于一身的创作工具箱,为用户提供无限的创作可能。不论您是想创作精彩的文章,还是创作精美的绘画作品,IMYAI系统都能满足您的需求。它集…

不想要反馈的错误遮挡页面,,想让它在控制台提示

开始页面是这样的 然后在vue.config.js 中修改 devServer: {client: {//当出现编译错误或警告时,在浏览器中是否显示全屏覆盖。 示例为只显示错误信息overlay: {runtimeErrors: false,},},},然后关闭服务,重新运行项目。 结果

【Netty】netty启动流程源码解析

文章目录 Netty整体架构一个启动流程源码解析new NioEventLoopGroup(1)构建线程池基础信息构建线程选择策略 groupchannelhandlerchildHandlerbindinitAndRegister反射创建 NioServerSocketChannel 对象init 注册channeldoBind0 流程图思考 Netty整体架构 是什么: N…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …

Docker-学习笔记(借助宝塔面板)

ubuntu环境 一、安装 可以参考官网进行或其他博客进行安装 1.进入宝塔面板 进图Docker菜单,查看是否提示安装。 2.查看是否安装 查看版本 docker -v 证明已经安装 二、常用命令 1.查看版本 docker -v 2.启动、停止、重启docker systemctl start docker…

windows C++-通过 C++/WinRT 使用 API(一)

本文介绍如何使用 C/WinRT API,无论它们是 Windows 的一部分、由第三方组件供应商或自行实现。 本文中的代码示例较短,并且很容易试验,可以通过创建新的 Windows 控制台应用程序 (C/WinRT) 项目和复制粘贴代码来重现它们。 但是,…

【Redis】浅谈架构和认识Redis

目录 架构演进 单机架构 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构(引入缓存) 垂直分库 微服务架构 认识Redis Redis的特性 架构演进 单机架构 简单来说就是只有一台服务器,这个服务器用来负责所有…

GlobalMapper方量计算(两期地形对比,提取填挖方区域及每个区域的方量)

0.序 在工程设计中,经常需要根据设计方案和现状地形之间进行方量计算,尤其关注方量变化的区域,哪些区域需要填方,哪些区域需要挖方,并依据此进行方量的平衡。 在流域管理中,尤其是湿地、三角洲等容易淤积或…

详细分析Java中的SPI机制(附Demo)

目录 前言1. 基本知识2. Demo3. 解读源码 前言 相关的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 SPI(S…

PANDA:免微调提升大型语言模型领域特定能力的新方法

人工智能咨询培训老师叶梓 转载标明出处 大模型虽然在广泛的任务上具有通用性,但在面对特定领域的任务时,它们的性能往往不如专门为这些领域训练的模型。传统的知识蒸馏(Knowledge Distillation, KD)方法通过资源密集型的微调过程…

怎么在电脑上查找打印机打印过的文件?告别翻箱倒柜!电脑查找已打印文件技巧公示!

在日常办公中,我们经常会使用打印机来输出各种文件,但有时候,我们可能需要回顾或查找之前打印过的文件。然而,这些文件一旦打印完成,往往就离开了我们的电脑屏幕,进入了纸质世界,而电子文件可能…

Tree-of-Traversals:结合知识图谱与大模型,通过树遍历和回溯寻找高置信度推理路径

Tree-of-Traversals:结合知识图谱与大模型,通过树遍历和回溯寻找高置信度推理路径 Tree-of-Traversals算法解析对比 MindMap1. 与知识图谱(KGs)的整合2. 推理方法3. 灵活性与可扩展性4. 在医学诊断中的应用 速度和准确1. 速度2. 推…