JavaScript的高级概述

还记得我们刚刚开始的时候给JavaScript的定义吗?
JavaScript是一种高级的,面向对象的,多范式变成语言!
这种定义JavaScript只是冰山一角!

JavaScript的高级定义

JavaScript是一种高级的、基于原型的、面向对象、多范式、解释或即时翻译、动态的、单线程的、垃圾收集的编程语言。具有一流的功能和非阻塞事件循环并发模型。

JavaScript的概述解释

高级的

所有的计算机程序都需要硬件资源
例如C语言这种低级的编程语言,就需要手动的管理这些硬件资源(就是因为这样,C语言运行速度非常快,但是开发周期非常长,难以维护!)
但是像JavaScript或python这种高级的变成语言,开发人员不需要去关心这些,因为这些都是自动发生的!(所以这些语言相对于C语言来说,运行速度可能并不是很快,但是容易学习,可以满足快速开发的优点!)

垃圾收集

JavaScript中的垃圾收集是自动进行的,它负责在代码执行过程中回收不再使用的内存。垃圾收集器会定期扫描内存中的对象,标记那些仍然被引用的对象,并清除那些没有被引用的对象,以释放内存空间。
在JavaScript中,垃圾收集器使用了一种称为"标记-清除"的算法。它通过标记所有被引用的对象,然后清除那些没有被标记的对象来进行垃圾回收。这个过程通常是在后台进行的,不需要开发者手动介入。
除了标记-清除算法,JavaScript还使用了其他一些技术来优化垃圾收集,例如分代回收和增量收集。分代回收将对象分为不同的代,根据对象的生命周期来选择不同的垃圾收集策略。增量收集则是将垃圾收集过程分成多个小步骤,在代码执行的间隙逐步完成垃圾回收,以减少对代码执行的影响。
需要注意的是,虽然JavaScript有自动的垃圾收集机制,但是开发者仍然需要注意避免内存泄漏的情况,即保证不再使用的对象能够被垃圾收集器正确地清除。这包括及时释放不再使用的引用、避免循环引用等。

解释性、即时编译

众多周知,机器只认识0或者1,但是人不可能手动去编写这种机器编码,我们一般用JavaScript这种可以让我们读懂的编程语言,JavaScript在内部会即时的把我们编写的代码翻译成机器代码

多范式语言

范式:结构化代码的方法和心态,这将指导您的编码风格和技术
常见的三种范式:
1.程序化(目前为止我们所写的)
2.面向对象
3.函数式编程

范式类型也分为命令式和声明式

基于原型、面向对象

● 除了原始值(数值、字符串),在JavaScript中所有的东西都是对象(例如数组)!
● 例如数组,我们可以使用push直接对数组进行操作,为什么呢?在JavaScript中,数组对象是通过内置的Array构造函数创建的。这个构造函数在其原型对象(Array.prototype)上定义了一系列的方法,包括push方法。当我们创建一个数组对象时,它会自动继承Array.prototype上的方法,包括push方法。
当我们调用数组对象的push方法时,实际上是在调用Array.prototype上的push方法。这个方法会在数组的内部实现中进行操作,向数组的末尾添加新的元素。
所以,push方法是通过JavaScript的原型链机制,将push方法定义在Array.prototype上,从而使得所有的数组对象都可以继承和使用这个方法。
在这里插入图片描述

具有一流的功能

在具有一流函数的语言中,函数被简单地当作变量来对待。我们可以将它们传递给其他函数,并从函数返回它们。
在这里插入图片描述

虽然我们点击事件是一个函数,但是我们调用它好像就在调用变量一样!

动态的

JavaScript中的动态类型指的是在运行时可以改变变量的数据类型的特性。
与静态类型语言不同,JavaScript不需要在编写代码时显式声明变量的类型。变量的类型是根据赋给变量的值来推断的。这意味着同一个变量在不同的上下文中可以被赋予不同类型的值。
例如,我们可以将一个变量先赋值为字符串,然后再将其赋值为数字。JavaScript会根据赋值的值来确定变量的类型,并在需要时自动进行类型转换。
动态类型的特性使得JavaScript非常灵活,可以根据需要在运行时改变变量的类型。这也意味着我们需要在编写代码时更加注意类型的转换和处理,以避免潜在的错误。
需要注意的是,动态类型并不意味着JavaScript是弱类型语言。JavaScript实际上是一种弱类型语言,因为它允许在某些情况下进行隐式类型转换。但是,由于动态类型的特性,JavaScript的类型转换相对灵活,需要开发者更加谨慎地处理类型相关的操作。
在这里插入图片描述

typescript优化了JavaScript的这一特性

单线程的、非阻塞事件循环并发模型。

并发模型

JavaScript引擎如何处理同时发生的多个任务;

我们为什么需要并发模型?
JavaScript运行在单线程中,所以它一次只能做一件事

那如果有一些长事件任务该如何处理?(例如需要即时的获取服务器的数据?)
听起来这样的话会阻塞线程,但是我们肯定是需要非阻塞行为!

我们该如何实现这一点呢?
通过使用事件循环:接受长时间运行的任务,在“后台”执行它们,并在它们完成后将它们放回主线程
(这里只是很笼统去介绍,后面会详细介绍,因为实际情况并没有说的那么简单!)

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

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

相关文章

高效文件整理:按数量划分自动建立文件夹,轻松管理海量文件

在日常生活和工作中,我们经常需要处理大量的文件。然而,如何高效地整理这些文件却是一个棘手的问题。有时候,我们可能需要按照特定的规则来建立文件夹,以便更高效地整理文件。例如,您可以按照日期、时间或者特定的标签…

CSS3媒体查询与页面自适应

2017年9月,W3C发布媒体查询(Media Query Level 4)候选推荐标准规范,它扩展了已经发布的媒体查询的功能。该规范用于CSS的media规则,可以为文档设定特定条件的样式,也可以用于HTML、JavaScript等语言。 1、媒体查询基础 媒体查询…

【Linux】centOS7安装配置及Linux的常用命令---超详细

一,centOS 1.1 centOS的概念 CentOS(Community Enterprise Operating System)是一个由社区支持的企业级操作系统,它是以Red Hat Enterprise Linux(RHEL)源代码为基础构建的。CentOS提供了一个稳定、可靠且…

PyGame:Python 游戏编程入门

一、说明 当我在上个世纪末开始学习计算机编程时,我的愿望是编写计算机游戏。我试图弄清楚如何在我学到的每种语言和每个平台上编写游戏,包括 Python。这就是我发现pygame并学习如何使用它来编写游戏和其他图形程序的方式。当时,我真的很想要…

JavaEE就业课 V12.5 完整版

简介 众所周知,在IT互联网领域是靠技术吃饭的,更符合企业需求的先进技术才是硬通货。黑马Java学科一直在行动,一直走在行业最前沿! 四项目制用四个不同类型、不同开发深度的项目,去解决企业用人需求与学员具备相应开发能力匹配的…

谷歌AlphaFold模型迎来重大突破!可以预测生物分子、配体

11月1日,谷歌旗下的AI研究机构DeepMind在官网发布了,蛋白质结构预测模型 AlphaFold的最新技术进展:已显著提升了预测准确性,并将覆盖范围从蛋白质扩展至其他生物分子,包括配体(小分子)。 据悉&…

第五章 I/O管理 十一、减少磁盘延迟时间的方法

目录 一、交替编号 1、定义: 二、磁盘地址结构的设计 三、错位命名 四、总结 一、交替编号 1、定义: 若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。 二、…

泛微e-office download.php任意文件

0x01 应用介绍 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件,国内协同OA办公领域领导品牌,致力于为企业用户提供专业OA办公系统、移动OA应用等协同OA整体解决方案 0x02 影响版本及语法特征 泛微e-offcie9 fofa:app”泛微-EOffice” && b…

【深⼊理解指针4】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 回调函数是什么? 2. qsort使用举例 2.1测试qsort函数排序整型数组 2.2测试qsort函数排序结构体数组 3. qsort函数的模拟实现 3.1测试bubble_sort函数…

Android渲染流程

目录 缓冲区的不同生命周期代表当前缓冲区的状态: 多个源 ViewRootImpl: Android4.0: Android5.0: Android应用程序调用SurfaceFliger将测量,布局,绘制好的Surface借助GPU渲染显示到屏幕上。 一个Acti…

什么是AUTOSAR ComStack,AUTOSAR架构中,CAN通信堆栈CAN Communication Stack介绍

AUTOSAR(Automotive Open System Architecture)ComStack指的是AUTOSAR架构中的通信堆栈。在AUTOSAR体系结构中,ComStack是指用于不同软件组件(如应用软件、基础软件等)之间进行通信的一组协议和服务。 在AUTOSAR架构中…

MTSC2023|深圳大会,你关心的技术话题都在这里

MTSC中国互联网测试开发大会 (Make Tester Super Cool, 简称MTSC) 是由国内知名的测试技术社区TesterHome发起的软件测试行业技术会议,大会以“软件质量保障体系和测试研发技术交流”为主要目的,旨在为行业搭建一个深入探讨和交流…

“深入理解Nginx的负载均衡与动静分离“

目录 引言一、Nginx简介1. Nginx的基本概念2. Nginx的特点3. Nginx的安装配置 二、Nginx搭载负载均衡三、前端项目打包四、Nginx部署前后端分离项目,同时实现负载均衡和动静分离总结 引言 在现代互联网应用中,高性能和可扩展性是至关重要的。Nginx作为一…

DVWA-SQL Injection SQL注入

概念 SQL注入,是指将特殊构造的恶意SQL语句插入Web表单的输入或页面请求的查询字符串中,从而欺骗后端Web服务器以执行该恶意SQL语句。 成功的 SQL 注入漏洞可以从数据库中读取敏感数据、修改数据库数据(插入/更新/删除)、对数据…

k8s基本操作命令

目录 1、//查看资源对象简写 2、//查看集群信息 3、//配置kubectl自动补全 4、//node节点查看日志 5、//查看 master 节点状态 6、//查看命令空间 7、//查看default命名空间的所有资源 8、//创建命名空间app 9、//删除命名空间app 10、//在命名空间kube-public 创建…

华为OD机考算法题:计算最大乘积

题目部分 题目计算最大乘积难度易题目说明给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值。 如果没有符合条件的两个元素&#xff0c;返回 0。输入描述输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2< 数组长度<…

药监局瑞数6 分析 2023版

网站地址 aHR0cHM6Ly93d3cubm1wYS5nb3YuY24veWFvcGluL3lwamdkdC9pbmRleC5odG1s 清除cookie 选中脚本调试 第一次获取的结果ts 第二次获取的结果是一个294cc83.js&#xff0c;可以固定 第三次获取的结果 content和ts属性每次都要换,还有ts属性一定要和content对应,否则你怎么…

比较BFS和DFS

目录 代码框架对比 引出模板 代码框架对比 dfs是栈的递归&#xff0c;bfs是队列的入出。 引出模板 x可以是栈可以是队列&#xff0c;也可以是随机队列、随机容器&#xff0c;一样可以把整张图遍历出来。

golang中的Interface接口 类型断言、接口赋值、空接口的使用、接口嵌套

Interface整理 文章目录 Interface整理接口嵌套接口类型断言类型判断 type-switch使用方法集与接口空接口实例 接口赋值给接口 接口是一种契约&#xff0c;实现类型必须满足它&#xff0c;它描述了类型的行为&#xff0c;规定类型可以做什么。接口彻底将类型能做什么&#xff0…

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接&#xff1a;IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview&#xff1f; Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush&#xff1a; 被定义为枚举&#xff1a; export enum…