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.mzph.cn/news/125770.shtml

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

相关文章

网络协议--TCP的保活定时器

23.1 引言 许多TCP/IP的初学者会很惊奇地发现可以没有任何数据流通过一个空闲的TCP连接。也就是说,如果TCP连接的双方都没有向对方发送数据,则在两个TCP模块之间不交换任何信息。例如,没有可以在其他网络协议中发现的轮询。这意味着我们可以…

centos英伟达驱动安装

1、预安装操作 1.1. Verify You Have a CUDA-Capable GPU lspci | grep -i nvidia 1.2. Verify You Have a Supported Version of Linux uname -m && cat /etc/*release1.3. Verify the System Has gcc Installed gcc --version1.4. Verify the System…

Node.js的基本概念node -v 和npm -v 这两个命令的作用

Node.js 是一个开源且跨平台的 JavaScript 运行时环境,它可以让你在服务器端运行 JavaScript 代码。Node.js 使用了 Chrome 的 V8 JavaScript 引擎来执行代码,非常高效。 在 Node.js 出现之前,JavaScript 通常只在浏览器中运行,用…

第 369 场 LeetCode 周赛题解

A 找出数组中的 K-or 值 模拟 class Solution { public:int findKOr(vector<int> &nums, int k) {vector<int> cnt(32);for (auto x: nums)for (int i 0; i < 32; i)if (x >> i & 1)cnt[i];int res 0;for (int i 0; i < 32; i)if (cnt[i] &…

uniapp 开发微信小程序 v-bind给子组件传递函数,该函数中的this不是父组件的二是子组件的this

解决办法&#xff1a;子组件通过缓存子组件this然后&#xff0c;用bind改写this 这个方法因为定义了全局变量that 那么该变量就只能用一次&#xff0c;不然会有赋值覆盖的情况。 要么就弃用v-bind传入函数,改为emit传入自定义事件 [uniapp] uview(1.x) 二次封装u-navbar 导致…

ubuntu配置 Conda 更改默认环境路径

我的需求是以后凡是新建一个虚拟环境都需要安装在一个挂载了大容量的分区/data里面 /home里面的是即将爆满但是还能塞点东西的硬盘. 如果您想要永久更改 Conda 的默认环境路径&#xff0c;可以编辑 Conda 的配置文件。首先&#xff0c;找到 Conda 的配置文件通常是 .condarc 文…

C#学习 - 参数、拓展方法

传值参数 在声明时不带修饰符的形参就是值参数 一个值参数对应一个局部变量&#xff0c;它的初始值来自该方法调用所提供的相应实参。值参数是实参的副本&#xff0c;对值参数的操作不会影响变量的值 传值参数 - 值类型 internal class Program {static void Main(string[] …

C++ 使用堆栈解决回文匹配问题

题目&#xff1a;设称正读和反读都相同的字符序列为“回文”&#xff0c;例如&#xff0c;“abba“和“abccba”是“回文”&#xff0c;“abcde”和“ababab”则不是“回文“&#xff0c;试写一个算法&#xff0c;判别读入的一个以为结束符的字符序列是否是“回文”。 主要思想…

如何读懂深度学习python项目,以`Multi-label learning from single positive label`为例

Paper : Multi-label learning from single positive label Code 先读一读README.md 可能有意想不到的收获&#xff1b; 实验环境设置要仔细看哦&#xff01; 读论文 如何读论文&#xff0c;Readpaper经典十问 &#xff08;可能在我博客里有写&#xff09; How to read a …

@JsonFormat 注解的使用

SpringBoot 中的 JsonFormat 注解 1. 引言2. 简介3. 使用①引入依赖②添加注解 1. 引言 在前后端交互过程当中&#xff0c;往往需要后端返回前端日期类型数据&#xff0c;在将数据返回给前端的时候&#xff0c;可能会需要对日期类型进行格式化&#xff1b; 为更便捷的返回需要…

html获取网络数据,列表展示 一

html获取网络数据&#xff0c;列表展示 js遍历json数组中的json对象 image.png || - 判断数据是否为空&#xff0c;为空就显示 - <!DOCTYPE html> <html><head><meta charset"utf-8"><title>网页列表</title></head><b…

WordPress恢复时候遇到的几个问题

1&#xff0c;一键安装 LAMP 最好是选择 CentOS 这种成熟的系统&#xff0c;最开始用 Alibaba Linux 报了好几个错&#xff0c;懒得折腾&#xff0c;最后重置镜像了。 https://lnmp.org/ wget https://soft.lnmp.com/lnmp/lnmp2.0.tar.gz -O lnmp2.0.tar.gz && tar z…

省钱兄短剧短视频视频滑动播放模块源码支持微信小程序h5安卓IOS

# 开源说明 开源省钱兄短剧系统的播放视频模块&#xff08;写了测试弄了好久才弄出来、最核心的模块、已经实战了&#xff09;&#xff0c;使用uniapp技术&#xff0c;提供学习使用&#xff0c;支持IOSAndroidH5微信小程序&#xff0c;使用Hbuilder导入即可运行 #注意&#xff…

JavaScript从入门到精通系列第二十六篇:详解JavaScript中的Math对象

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥连接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…

ES的三种分页的选择

一、ES的三种分页的选择 es实现分页查询&#xff0c;在ES中有三种方式可以实现分页&#xff1a;fromsize、scroll、search_after 1、fromsize 分页 原理&#xff1a; 假设取的页数较大时(深分页)&#xff0c;如请求第20页&#xff0c;Elasticsearch不得不取出所有分片上的第…

无人机真机搭建问题记录文档(待续)

搭建问题 问题1 高飞课程中的飞控停产&#xff0c;更换飞控&#xff08;pixhawx 6c&#xff09;出现如下问题 1、飞控太大造成安装机载电脑的碳板上的孔被挡住。 2、课程提供的飞控固件&#xff0c;与更换的飞控不匹配 解决办法 1、现在的无人机碳板上只安装三个螺纹孔&…

pytorch 笔记:index_select

1 基本使用方法 index_select 是 PyTorch 中的一个非常有用的函数&#xff0c;允许从给定的维度中选择指定索引的张量值 torch.index_select(input, dim, index, outNone) -> Tensorinput从中选择数据的源张量dim从中选择数据的维度index 一个 1D 张量&#xff0c;包含你想…

GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

文章目录 一、GPS模块介绍二、坐标转换转换原理参数解释&#xff1a; 增加回调函数效果演示 本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程&#xff0c;使用国产ROS开发板鲁班猫(LubanCat )进行调试。 一、GPS模块介绍 在淘宝找了款性价比较高的轮趣科技GPS北斗双…

Linux 远程桌面软件

为您的 IT 管理员配备最好的 Linux 远程桌面软件至关重要。原因如下&#xff1f;Linux 是一个开源和免费的操作系统&#xff0c;它提供了一个非常灵活和可定制的软件内核。由于其开源性质&#xff0c;Linux 被认为是市场上最安全的操作系统之一&#xff0c;它拥有一个全球用户社…

关于readline方法使用的一个中文乱码引发的思考

故事起源于这段代码&#xff0c;我想给一个本地地址然后去读取文件内容&#xff0c;然后使用了reader.readLine();方法&#xff0c;但是本地没有任何报错&#xff0c;但是线上中文乱码导致直接报错了。 BufferedReader reader;try {reader new BufferedReader(new FileReader(…