闭包机制的底层实现原理

说明:此次分享不涉及ES6的let,const,块级作用域,这些其实都是对本次分享内容的扩展。

  • 闭包的重要性

JS的内功心法,闭包是JavaScript中非常重要的核心概念,关系着JS里很多核心的机制,理解了它,很多问题都会迎刃而解,不理解闭包用JS永远像隔着一层窗户纸。

前端发展日新月异,内功练好,才能以不变应对万变。

  • 网络上一些对闭包的解释
    • MDN: 闭包是函数和声明该函数的词法环境的组合

    • 面试官问我:什么是JavaScript闭包,我该如何回答? —— 外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象,这就是闭包的重要概念;闭包只能取得包含函数中的任何变量的最后一个值

    • 浅谈闭包 —— 有权访问另一个函数作用域内变量的函数都是闭包

    • 廖雪峰 —— 一个函数返回了一个函数后,其内部的局部变量还被新函数引用

      问题: 都是对闭包表面现象的一种描述,没有从本质上解释清楚闭包是如何产生的,看完之后貌似是懂了其实还是不懂。闭包的本质是什么,就需要从内存的角度分析,没有内存图讲闭包都是耍流氓。

  • 学习方法

先抽象再具体。

从幼儿园就开始用这个方法来学习了,教小朋友1+1=2,太抽象了,让他掰着手指头数就马上明白了。

弄清楚哪些是需要去记忆的,哪些是需要去理解的,需要理解的东西多从内存的角度来理解。

比如如何理解JS的基本类型和引用类型,JS高程中开始写到,“基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象”,这其实是对知识的抽象总结,但是只记忆这个抽象总结是无法真正理解问题的本质的。

之后JS高程又从内存的角度对基本类型和引用类型进行说明,从而能够从本质上理解什么是基本类型和引用类型。

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

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

相关文章

【MySQL】学习和总结使用列子查询查询员工工资信息

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-5odctDvQ0AHJJc1C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

中国(京津冀)太阳能光伏推进大会暨展览会

中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业的发展的重要活动。该活动旨在加大对太阳能光伏的投资和支持,推动太阳能光伏技术的创新和应用,促进太阳能光伏产业的规模化发展。 此次大会暨展览会将为太阳能光伏行业相关企业提供一…

LeetCode刷题记录——day2

https://leetcode.cn/problems/product-of-array-except-self/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题在于不使用除法并且空间复杂度为O(1),当第一次从头开始遍历时由于不知道后续数组元素是什么,所以无法得到答案&#xf…

Python 枚举(Python Enumerations)

Python 枚举(Enumerations)是一种用于创建命名的常量集合的方法。它提供了一种更好地组织代码、增加可读性和可维护性的方式,特别是在需要表示一组相关常量时。 Python 的枚举是通过 enum 模块实现的,它在 Python 3.4 版本之后成…

【Linux】Linux基本开发工具(yum) (vi/vim)的使用

本文章内容: 学习yum工具,进行软件安装掌握vim编辑器使用 Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成…

es 聚合操作(一)

前言 Elasticsearch除搜索以外,提供了针对ES 数据进行统计分析的功能。聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 衣服品牌的受欢迎程度这些衣服的平均价格、最高价格、最低价格这些衣服的每天、每月销量如何 使用…

产品推荐 | 基于Xilinx Zynq UltraScale+打造的仙女座 Andromeda FPGA核心板

1、产品概述 仙女座Andromeda XZU65片上系统(SoC)核心板通过结合高端Xilinx Zynq UltraScale™ MPSoC系列芯片和高速DDR4 ECC SDRAM、eMMC flash、双QSPI flash、双Gigabit Ethernet PHY、USB 3.0形成了一个完整的、功能强大的嵌入式处理系统。得益于大…

Rhino与Revit API之间的转换

你好,我是九哥~ 最近发现Rhino.Inside.Revit的API手册更新了,终于可以开心的写RIR代码了,小伙伴快去试试吧,地址如下: https://www.rhino3d.com/inside/revit/1.0/reference/rir-api 今天我们先来聊聊 Rhino 与 Rev…

ARM:汇编点灯

.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…

Python实战:机器学习算法

本文将详细介绍Python中常用的机器学习算法&#xff0c;包括线性回归、逻辑回归、决策树、随机森林、支持向量机等。 一、引言 机器学习是人工智能的一个重要分支&#xff0c;它使计算机能够从数据中学习并做出决策。Python作为一门流行的编程语言&#xff0c;拥有丰富的机器…

蓝桥杯2023年-阶乘的和(数学推理,C++)

题目描述 给定 n 个数 Ai&#xff0c;问能满足 m! 为∑ni1(Ai!) 的因数的最大的 m 是多少。其中 m! 表示 m 的阶乘&#xff0c;即 1 2 3 m。 思路 我们发现m最大为所有A中的最小值&#xff0c;但是如果有Ai1个Ai相同&#xff0c;则他们可以合并为Ai1&#xff0c; 即…

华为ensp中rip动态路由协议原理及配置命令(详解)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言————— RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种距离矢…

hive sql实现查找商品表名称中包含敏感词的商品

背景 用户上传的商品表一般会包含商品名称&#xff0c;由于这些商品名称是用户自己起的&#xff0c;里面可能包含了敏感词&#xff0c;需要通过sql找出来哪些商品的商品名称包含了敏感词汇 hive sql实现查找商品表名称中包含敏感词的商品 实现思路&#xff1a; 1.商品表和敏…

获取指定日期金融期货数据

数据来源&#xff1a;日统计 | 中国金融期货交易所 代码&#xff1a; import akshare as ak from datetime import datetime import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None)cffex_daily ak.get_cffex_daily(datetime…

利用SpringBoot Actuator 来构造/health /info 等监控接口

当我们用K8S 部署微服务时&#xff0c; 很多时候需要调用 service的/health 等状态接口&#xff0c; 已确定container的运行状态是否健康。 而Spring boot Actuator 就是用来快速构造这些状态接口的工具 引入依赖 <!-- actuator --><dependency><groupId>or…

xss.pwnfunction(DOM型XSS)靶场

环境进入该网站 Challenges (pwnfunction.com) 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebo…

Grok-1 源码中语法 @dataclass 变量名称:变量类型

Grok-1 源码中语法 dataclass 变量名称:变量类型 flyfish model.py dataclass class Transformer(hk.Module):"""A transformer stack."""num_q_heads: intnum_kv_heads: intkey_size: intwidening_factor: floatinit_scale: floatmesh: Anyat…

YOLO_you only look once

前言 计算机图形学的课程即将结束&#xff0c;我需要提交一份关于YOLO模型的学习报告。在这段时间里&#xff0c;我对YOLO进行了深入的学习和研究&#xff0c;并记录下了我的学习过程和心得体会。本文将详细介绍YOLO模型的原理、优缺点以及应用领域&#xff0c;希望能够为后续…

css 如何获取分辨率(使用@media查询)

在CSS中&#xff0c;可以使用media查询来应对不同的屏幕分辨率。例如&#xff0c;您可以为不同的屏幕宽度设置不同的样式规则。 /* 针对屏幕宽度小于600px的样式 */ media screen and (max-width: 599px) {body {background-color: lightblue;} }/* 针对屏幕宽度大于或等于600…

spring整合Sentinel

安装sentinel&#xff1a; 执行命令; java -jar sentinel-dashboard-1.8.6.jar 注:sentinel的默认端口为8080&#xff0c;容易出现tomcat的冲突。 当端口冲突&#xff0c;可以使用该指令修改sentinel的端口 默认账号和密码都为sentinel Springcloud整合sentinel&#xff1a;…