JavaScript的三座大山

news2025/3/1 23:28:21

前言:这个题目是抄的,看着很有意思,就拿过用了,毕竟CV是程序员的基本功底嘛,顺带把图也拿过来了

在这里插入图片描述

作用域和闭包

这个几乎是天天在用的东西,可能有些人甚至不知道这个概念,但是用到过这种方法去解决某一些问题

概念:
作用域: 指代码当前上下文,控制着变量和函数的可见性和生命周期。最大的作用是隔离变量,不同作用域下同名变量不会冲突。用自己的话来说就是:作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。
作用域链: 指如果在当前作用域中没有查到值,就会向上级作用域查询,直到全局作用域,这样一个查找过程所形成的链条就被称之为作用域链。作用域可以堆叠成层次结构,作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行
作用域具体可细分为四种:全局作用域、模块作用域、函数作用域、块级作用域

  • 全局作用域: 代码在程序的任何地方都能被访问,例如 window 对象。但全局变量会污染全局命名空间,容易引起命名冲突。

  • 模块作用域: 早期 js 语法中没有模块的定义,因为最初的脚本小而简单。后来随着脚本越来越复杂,就出现了模块化方案(AMD、CommonJS、UMD、ES6模块等)。通常一个模块就是一个文件或者一段脚本,而这个模块拥有自己独立的作用域。

  • 函数作用域: 顾名思义由函数创建的作用域。闭包就是在该作用域下产生,后面我们会单独介绍。

  • 块级作用域: 由于 js 变量提升存在变量覆盖、变量污染等设计缺陷,所以 ES6 引入了块级作用域关键字来解决

这些问题。典型的案例就是 let 的 for 循环和 var 的 for 循环。

// var demo
for(var i=0; i<10; i++) {
    console.log(i);
}
console.log(i); // 10

// let demo
for(let i=0; i<10; i++) {
    console.log(i);
}
console.log(i); //ReferenceError:i is not defined

或者有个不错的例子:
在这里插入图片描述
最后输出的结果为 2, 4, 12

  • 泡泡 1 是全局作用域,有标识符 foo;
  • 泡泡 2 是作用域 foo,有标识符 a,bar,b;
  • 泡泡 3 是作用域 bar,仅有标识符 c。

接下来就是**闭包**,这个大佬写的非常之详细;我这里简单说下:

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

原型和原型链

有对象的地方就有 原型,每个对象都会在其内部初始化一个属性,就是prototype(原型),原型中存储共享的属性和方法。当我们访问一个对象的属性时,js引擎会先看当前对象中是否有这个属性,如果没有的就会查找他的prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。这么一个寻找的过程就形成了 原型链 的概念。

理解原型最关键的是理清楚__proto__、prototype、constructor三者的关系,我们先看看几个概念:

  • __proto__属性在所有对象中都存在,指向其构造函数的prototype对象;prototype对象只存在(构造)函数中,用于存储共享属性和方法;constructor属性只存在于(构造)函数的prototype中,指向(构造)函数本身。

  • 一个对象或者构造函数中的隐式原型__proto__的属性值指向其构造函数的显式原型 prototype
    属性值,关系表示为:instance.proto === instance.constructor.prototype

  • 除了 Object,所有对象或构造函数的 prototype 均继承自 Object.prototype,原型链的顶层指向
    null:Object.prototype.proto === null Object.prototype
    中也有constructor:Object.prototype.constructor === Object

  • 构造函数创建的对象(Object、Function、Array、普通对象等)都是 Function 的实例,它们的 proto
    均指向 Function.prototype。
    在这里插入图片描述

异步和单线程

JavaScript 是 单线程 语言,意味着只有单独的一个调用栈,同一时间只能处理一个任务或一段代码。队列、堆、栈、事件循环构成了 js 的并发模型,事件循环 是 JavaScript 的执行机制。

为什么js是一门单线程语言呢?最初设计JS是用来在浏览器验证表单以及操控DOM元素,为了避免同一时间对同一个DOM元素进行操作从而导致不可预知的问题,JavaScript从一诞生就是单线程。

既然是单线程也就意味着不存在异步,只能自上而下执行,如果代码阻塞只能一直等下去,这样导致很差的用户体验,所以事件循环的出现让 js 拥有异步的能力。

在这里插入图片描述
(来源网络,侵权联系立马删)

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

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

相关文章

Dubbo消费者调用流程分析

消费者在发起一次调用的时候时序图如下 由于Dubbo调用是基于动态代理的方式,所以请求先进入 InvokerInvocationHandler#invoke()方法,进而调用到MockClusterInvoker#invoke()方法。MockClusterInvoker#invoke()中判断是否需要开启 Mock,如果开启 Mock 调用 doMockInvoke 执行…

WebRTC系列-Qos系列之AEC-可配置参数

文章目录 1. 简介2. 源码中相关参数WebRTC的自适应回声消除(AEC)是一个广泛使用的技术,用于在音频通信中消除扬声器输出产生的回声。在WebRTC中,有三种AEC算法可供选择,分别是 AECM、 AEC和 AEC3。本文将介绍WebRTC AEC 3算法的原理和应用场景。 在上图中可以看出AEC算…

MiniGPT4,开源了。

大家好&#xff0c;我是 Jack。 一个月前&#xff0c;我发布过一篇文章&#xff0c;讲解了 GPT4 的发布会。 ChatGPT 的对话能力&#xff0c;想必大家也早已体验过了&#xff0c;无论是文本生成能力&#xff0c;还是写代码的能力&#xff0c;甚至是上下文的关联对话能力&#…

SpringBoot自定义登录、权限验证

1、首先最基础的User实体类&#xff0c;使用了lombok&#xff0c;所以省略了getter、setter方法 Data public class UserInfo implements Serializable {private Integer id;//用户名private String username;//密码不需要被序列化存入redisprivate transient String password…

vue3类型uniapp调用signalr

目录 背景 安装 renderjs 1选择一个tab页面承载renderjs代码 2编写业务逻辑代码 3编写renderjs代码 背景 后端使用.net6开发&#xff0c;长链接选择了微软的signalr而非原生的websocket 前端uniapp下vue3类型开发的app&#xff0c;需要通过长链接获取后端推送的消息 安…

通过对话了解cookie session与token的用途和区别

1 先来了解cookie与localstorage 1.1 http的无状态 用户: 我想看csdn我有多少粉丝了(http请求) 服务器:你是&#xff1f;请告诉我你的名字和密码&#xff0c;我确认你是谁 用户&#xff1a;发起登录请求 admin 123456 服务器&#xff1a;ok&#xff0c;登录成功 用户&…

分享几个国内免费的ChatGPT镜像网址(亲测有效)

最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力&#xff0c;那么今天就分享几个ChatGPT国内的镜像网址&#xff0c;大家可以直接使用&#xff01;记得点赞收藏一下呦&#xff01; 1、AQ Bot&#xff0c;网址&#xff1a;点我 https://su.askaiw.com/aq 缺点&…

搭建CDH流程记录

搭建CDH流程记录 如何搭建本地yum源 1.配置yum源这里使用 阿里源 http://mirrors.aliyun.com/repo/Centos-7.repo wget http://mirrors.aliyun.com/repo/Centos-7.repo2.安装http软件 yum install httpd -y3.配置httpd.conf vi /etc/httpd/conf/httpd.conf在 AddType appli…

酒店行业开启“狂飙”,尚美数智稳步领跑

文|智能相对论 作者|范柔丝 在消费行业迅速复苏的浪潮下&#xff0c;无论从销量还是数量来看&#xff0c;酒旅行业蛰伏三年后&#xff0c;终于开启了业绩狂飙。 从数量来看&#xff0c;企查查数据显示&#xff0c;截至目前&#xff0c;我国现存酒店相关企业233.5万家&#x…

Grafana链接跳转与值传递,把表格变量值从一个dashboard传递给另一个dashboard

文章目录 1. 创建两个空白 Dashboard 用于实验2. dash_1&#xff1a;创建跳转用的表格2. dash_2&#xff1a;配置接收数据的变量 Variables3. 测试跳转4. 通过跳转的变量传递方法总结 这里&#xff0c;我们一步步的来&#xff0c;通过配置一个页面跳转的效果&#xff0c;把一个…

二结(4.18)项目进度

今天学长上了多线程的课程&#xff0c;内容挺广泛的&#xff0c;部分也需要实际运用到项目中来&#xff0c;但我的登录、注册实现还没区分开服务端和客户端&#xff08;仅在同一项目里实现&#xff09; --------------------------------------------------------------------…

【分布式系统】分布式系统架构的冰与火

什么是分布式系统 分布式系统&#xff08;distributed system&#xff09;是建立在网络之上的软件系统。 以上是摘自百度百科的解释&#xff0c;不可否则&#xff0c;分布式系统的基础是网络、计算、存储。比如常见的一个Web单体系统&#xff0c;其实也是一个分布式系统&#x…

Android监听消息(二)——电话及短信监听

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为2747字&#xff0c;预计阅读6分钟 前言 前面一篇《Android监听消息&#xff08;一&#xff09;——应用消息捕获》我们使用NotificationListenerService实现了应用的消息监听&#xff0c;但是电话和短信是…

【花雕学AI】爆款ChatGPT的核心算法和技术逻辑到底是什么?

一、ChatGPT是一种基于GPT模型的聊天机器人 由OpenAI研究中心开发&#xff0c;于2022年11月30日发布。它可以根据用户的输入&#xff0c;生成自然、流畅、有趣的对话回复。它的技术逻辑主要是利用大规模的预训练语言模型&#xff08;LLM&#xff09;&#xff0c;通过Transforme…

总结823

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;早上1.5小时背单词&#xff0c;背了两篇文章&#xff0c;之后抄写5篇文章。晚上做了一道长难句。 …

CAN-FD协议

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 CAN-FD协议**CAN-FD协议需要什么&#xff1f;**CAN-FD 协议的属性CAN-FD 协议中的安全性 OSI 层中的 CAN-FD**CAN-FD物理层设计**CAN-FD 数据链路层数据链路层…

【2023】cookie是什么?有什么用?一篇文章彻底搞懂cookie

一个不大不小的问题 假设服务器有一个接口&#xff0c;通过请求这个接口&#xff0c;可以添加一个管理员 但是&#xff0c;不是任何人都有权力做这种操作的 那么服务器如何知道请求接口的人是有权力的呢&#xff1f; 答案是&#xff1a;只有登录过的管理员才能做这种操作 …

一天掌握C51单片机基础1-计算机数值与MCS51单片机

目录 简介计算机的数值表示源码反码补码 MCS51 单片机型号与构成存储结构外部引脚与总线接口并行 IO 口工作原理工作周期 简介 本笔记参考B站高宏亮老师的教学视频&#xff1a;点击观看 计算机的数值表示 源码 正数&#xff1a;首位 0&#xff0c;其余七位表示实际数值 负数&…

Java内存模型JMM

大厂面试题&#xff1f; 你知道什么是java内存模型JMM吗&#xff1f; JMM和Volatile它们两个之间的关系&#xff1f; JMM有哪些特性和他的三大特性是什么&#xff1f; 为什么要有JMM&#xff0c;他为什么出现&#xff1f;作用和功能是什么&#xff1f; happens-before先行发…

如何用jmeter+ant+jenkins搭建一个接口自动化测试框架?

目录 前言 一、什么是Jmeter&#xff1f; 二、什么是Ant&#xff1f; 三、什么是Jenkins&#xff1f; 四、如何构建一个JmeterAntJenkins的接口自动化测试框架&#xff1f; 五、JmeterAntJenkins接口自动化测试框架的优势和特点 六、总结 前言 Jmeter是一款功能强大的开…