JavaScript的高级概述

news2024/11/18 5:51:40

还记得我们刚刚开始的时候给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.coloradmin.cn/o/1155671.html

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

相关文章

node使用fs模块(二)—— 读取文件的基本使用(普通读取、同步读取等、流式读取)

文章目录 一、读取文件1. 参数说明2. 基本使用3.读取文件的同步和异步 二、流式文件写入(fs.appendFile)1. 参数说明2.基本使用 一、读取文件 1. 参数说明 参数1: path——读取的文件路径(必填) 参数2: op…

怎么在电脑桌面上添加待办事项?

在电脑桌面上选择一款待办事项工具,可以高效率地督促各项任务的按时完成,大大地提高工作的效率,支持在电脑上安装待办事项的工具类型是比较多的,为更好的辅助日常办公,建议大家可以选择高效率辅助办公的电脑便签工具&a…

leetcode:374. 猜数字大小(二分查找)

一、题目 函数原型:int guessNumber(int n) 二、思路 本题其实就是从 1 - n 中找出所要的答案。利用guess函数来判断数字是否符合答案。 答案小于当前数字,guess函数返回-1 答案等于当前数字,guess函数返回0 答案大于当前数字,gue…

会自动写代码的AI大模型来了!阿里云推出智能编码助手通义灵码

用大模型写代码是什么样的体验?10月31日,杭州云栖大会上,阿里云对外展示了一款可自动编写代码的 AI 助手,在编码软件的对话窗口输入“帮我用 python 写一个飞机游戏”,短短几秒,这款名为“通义灵码”的 AI …

10月31日星期二今日早报简报微语报早读

10月31日星期二,农历九月十七,早报微语早读分享。 1、广西官宣:做试管婴儿费用可报销; 2、港媒:4名港大学生承认“煽惑他人蓄意伤人罪”,被判监禁2年; 3、331名中国维和官兵全部获联合国勋章…

广告电商——边看广告边赚钱,实现三方共赢的局面

购物能赚钱?你相信嘛?广告电商模式边购物边赚钱,每天看看广告就能赚钱,白嫖 零撸 我之前有个客户就用了这种模式,购物的积分,然后用户看广告释放积分来赚钱,因为广告都是我们对接好了的一些头部…

【SOC基础】单片机学习案例汇总 Part2:蜂鸣器、数码管显示

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

FreeRTOS深入教程(队列内部机制和源码分析)

文章目录 前言一、队列结构体分析二、创建队列三、读写队列源码分析1.读队列源码分析2.写队列源码分析 总结 前言 本篇文章主要来为大家分析队列的内部机制和源码实现。 一、队列结构体分析 在FreeRTOS中队列会使用一个结构体来表示: 1.int8_t * pcHead 和 int…

MySQL数据库的存储引擎,底层存储结构,事物隔离级别,索引,日志等

存储引擎 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 InnoDB 在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 引擎。 1.支持事务 2.行级锁…

YOLOv5/YOLOv7改进: AIFI (尺度内特征交互)助力YOLO | YOLO终结者?RT-DETR一探究竟

💡💡💡本文全网首发独家改进: AIFI (尺度内特征交互)助力YOLO ,提升尺度内和尺度间特征交互能力,同时降低多个尺度的特征之间进行注意力运算,计算消耗较大等问题 推荐指数:五星 AIFI | 亲测在多个数据集能够实现涨点 💡💡💡Yolov5/Yolov7魔术师,独家首…

Windows11无法打开Photoshop CC 2017问题解决

情况描述: Windows11上,双击Photoshop CC 2017没反应 解决办法: 此时需要启动Windows的“事件查看器”来确认问题出在哪里。可以直接通过开始菜单搜索启动,也可以通过右键点击“此电脑”->“管理”,然后找到事件查…

解密杭州亚运背后科技:核心系统100%上云,20多项全球首创智能应用

10月31日,2023杭州云栖大会,杭州亚运会信息技术中心执行指挥长、杭州亚组委广播电视和信息技术部副部长张鸽以《科技创新在亚运舞台精彩绽放》为主题,分享了杭州亚运会的智能亚运实践。 杭州亚运会打造了史上首个全覆盖的数字化服务体系&…

港府Web3宣言周年思考:合规困境中的“隐患”

出品|欧科云链研究院 作者|毕良寰 距离《有关虚拟资产在港发展的政策宣言》已过去一年,我们欧科云链研究院在分析全球几个主要国家和地区对Web3的监管政策及态度后,对港府的雄心壮志充满期待。然而,由于近期一些庞氏骗…

学习redis之前的泛泛而谈(特性介绍,应用场景,Ubuntu安装与通用命令介绍)

文章目录 前言关于分布式系统Redis特性Redis应用场景Redis5安装redis命令最核心的两个命令:get和setkeysexitsdelexpirettlredis中key的过期策略type redis数据类型的内部实现方式redis的单线程 前言 redis最重要的概念:在内存中存储数据 为什么要设计一…

MySQL(4):运算符

算术运算符 算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加()、减(-)、乘(*)、除(/)和取模(%&#…

在uni-app中使用ECharts - 配置四种不同的图表

👨‍🦰博主:小猫娃来啦 👨‍🦰文章核心:在uni-app中使用ECharts - 配置四种不同的图表 文章目录 前言安装ECharts插件引入ECharts库创建Charts实例和图表容器配置和渲染图表配置柱状图配置折线图配置饼图配…

详解final, abstract, interface关键字

一.final关键字 1.final关键字介绍 ——final关键字可以去修饰类、方法、属性和局部变量 2.final关键字的作用 1)final修饰类,这个类不能被其他类继承 2)final修饰方法,方法不能被重写 3)final修饰属性,属…

通过shiro框架记录用户登录,登出及浏览器关闭日志

背景: 公司项目之前使用websocket记录用户登录登出日志及浏览器关闭记录用户登出日志,测试发现仍然存在问题, 问题一:当浏览器每次刷新时websocket其实是会断开重新连接的,因此刷新一下就触发记录登出的日志&#xff0…

41.排序练习题(王道2023数据结构第8章综合练习)

试题1(王道8.3.3节综合练习2): 编写双向冒泡排序算法,在正反两个方向交替扫描。即第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列最前面,如此反复。 首先实现冒泡排序&…

FIFO 位宽转换

从8位转32位 module tb_fifo();reg clk,rst; initial beginclk0;forever #4.545 clk~clk; end initial beginrst1;#9.09 rst0; endreg [31:0] cnts; always (posedge clk or posedge rst) beginif(rst)begincnts < 32d0;endelsebegincnts < cnts 1b1;end endreg […