邂逅JavaScript

news2024/9/22 2:08:03

前言:前端三大核心

前端开发最主要需要掌握的是三个知识点:HTML、CSS、JavaScript

在这里插入图片描述

一、认识编程语言

1.计算机语言

前面我们已经学习了HTML和CSS很多相关的知识:

  • 在之前我们提到过, HTML是一种标记语言, CSS也是一种样式语言;

他们本身都是属于计算机语言, 因为都在和计算机沟通交流;

  • 在生活中两个人想要沟通, 必然是通过某一种语言(中文/英语/粤语/东北话)
  • 计算机语言就是我们人和计算机进行交流要学习的语言;

网页的三大组成部分的另外一个核心就是JavaScript:JavaScript必然也是一种计算机语言;

在这里插入图片描述

2.编程语言

事实上, JavaScript 我们可以对其有更加精准的说法:一种编程语言.

我们先搞清楚计算机语言和编程语言的关系和区别:

  • 计算机语言:计算机语言(computer language)指用于人与计算机之间通讯的语言,是人与计算机之间传递信息的介质。但是其概念比通用的编程语言要更广泛。例如,HTML是标记语言,也是计算机语言,但并不是编程语言
  • 编程语言:编程语言(英语:programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧, 用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动

很抽象, 我们来说明一下编程语言的特点:

  • 数据和数据结构
  • 指令及流程控制
  • 引用机制和重用机制
  • 设计哲学

这样的区分是否有意义呢?我们这里不讨论,我这里只把最专业的定义来告诉大家。

二、编程语言发展历史

1.常见的编程语言

在这里插入图片描述

2.编程语言的发展历史 – 机器语言

阶段一: 机器语言

  • 计算机的存储单元只有0和1两种状态,因此一串代码要让计算机“读懂”,这串代码只能由数字0和1组成。
  • 像这种由数字0和1按照一定的规律组成的代码就叫机器码,也叫二进制编码
  • 一定长度的机器码组成了机器指令,用这些机器指令所编写的程序就称为机器语言。

优点:

  • 代码能被计算机直接识别,不需要经过编译解析;

  • 直接对硬件产生作用,程序的执行效率非常高

缺点:

  • 程序全是些0和1的指令代码,可读性差,还容易出错;
  • 不易编写(目前没有人这样开发);

3.编程语言的发展历史 – 汇编语言

阶段二: 汇编语言

  • 为了解决机器语言的缺陷,人们发明了另外一种语言——汇编语言
  • 这种语言用符号来代替冗长的、难以记忆的0、1代码。(mov/push指令,经过汇编器,汇编代码再进一步转成0101)

优点:

  • 像机器语言一样,可以直接访问、控制计算机的各种硬件设备;

  • 占用内存少,执行速度快

缺点:

  • 第一,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性
    • 也就是说,一个程序只能在一种机器上运行,换到其他机器上可能就不能运行;
  • 第二,符号非常多、难记
    • 即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试;

应用场景

  • 操作系统内核、驱动程序、单片机程序;

4.编程语言的发展历史 – 高级语言

阶段三: 高级语言

  • 最好的编程语言应该是什么? 自然语言
  • 而高级语言, 就是接近自然语言, 更符合人类的思维方式
  • 跟和人交流的方式很相似, 但是大多数编程语言都是国外发明的, 因为都是接近于英文的交流方式

优点:

  • 简单、易用、易于理解,语法和结构类似于普通英文;

  • 远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用熟悉硬件知识

  • 一个程序还可以在不同的机器上运行,具有可移植性

缺点:

  • 程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上;
  • 种类繁多:JavaScript 、 C语言、C++、C#、Java、Objective-C 、Python等;

5.机器语言和高级语言

在这里插入图片描述

在前端,我们需要学好的只有一门高级语言:JavaScript。

三、JavaScript的历史

1.认识JavaScript

维基百科对JavaScript的定义:

  • JavaScript(通常缩写为JS)是一种高级的解释型的编程语言;
  • JavaScript是一门基于原型头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程

从上面的定义中, 我们会发现很多关键词:

  • 解释型语言? 原型? 头等函数? 多范式? 面向对象程序设计? 指令式编程? 函数式编程?
  • 这些改变往往会让人不知所云,需要我们完全掌握JavaScript再来回头看,每一个词语描述的都非常准确;

现在只需要知道,通俗的说法:

  • JavaScript是一门高级编程语言, 是前端开发的重要组成部分!

HTML和CSS也是前端开发的重要组成部分, 而JavaScript是前端开发的灵魂;

2.JavaScript的起源

1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。

  • 这是历史上第一个比较成熟的网络浏览器,轰动一时。
  • 但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。
  • 网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。

在这里插入图片描述

网景公司当时想要选择一种语言来嵌入到浏览器中:

  • 采用现有的语言,比如Perl、Python、Tcl、Scheme等等, 允许它们直接嵌入网页;
  • 1995年网景公司招募了程序员Brendan Eich,希望将Scheme语言作为网页脚本语言的可能性;

就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为 Java,正式向市场推出;

  • Java推出之后立马在市场上引起了轰动,Java当初有一个口号:“write once run anywhere”;
  • 网景公司动了心,决定与Sun公司结成联盟,希望将Java嵌入到网页中来运行;
  • Brendan Eich 本人非常热衷于Scheme,但是管理层那个时候有点倾向于Java,希望可以简化Java来适应网页脚本的需求;

在这里插入图片描述

但是Brendan Eich对此并不感兴趣,他用10天时间设计出来了JavaScript;

  • 最初这门语言的名字是Mocha(摩卡);
  • 在Navigator2.0 beta版本更名为 LiveScript
  • 在Navigator2.0 beta 3版本正式重命名为JavaScript,当时是为了给这门语言搭上Java这个热词;

当然10天设计出来语言足够说明Brendan Eich是天才,但是这门语言当时更像是一个多种语言的大杂烩;

  • 借鉴C语言的基本语法;

  • 借鉴Java语言的数据类型和内存管理;

  • 借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

  • 借鉴Self语言,使用基于原型(prototype)的继承机制。

Brendan Eich曾经这样描述过 JavaScript:

  • 与其说我爱 Javascript,不如说我恨它,它是C语言和Self语言一夜情的产物;

  • 十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。’

  • the part that is good is not original, and the part that is original is not good.

微软公司于1995年首次推出Internet Explorer,从而引发了与Netscape的浏览器大战。

  • 微软对Netscape Navigator解释器进行了逆向工程,创建了JScript,以与处于市场领导地位的网景产品同台竞争;
  • 这个时候对于开发者来说是一场噩耗,因为需要针对不同的浏览器进行不同的适配;

1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。

  • 1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262;
  • ECMA-262是一份标准,定义了ECMAScript;
  • JavaScript成为了ECMAScript最著名的实现之一;
  • 除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言;

所以说,ECMAScript是一种规范,而JavaScript是这种规范的一种实现。

四、JavaScript的分类

1.JavaScript的组成

ECMAScript是JavaScript的标准,描述了该语言的语法和基本对象。

  • JavaScript是ECMAScript的语言层面的实现;
  • 因为除了语言规范之外,JavaScript还需要对页面和浏览器进行各种操作;
  • 除了基本实现之外,还包括DOM操作和BOM操作;

目前我们会针对性的学习ECMAScript,也就是语言层面的内容,特别是ES5之前的语法。

在这里插入图片描述

2.JavaScript由谁来运行?

我们经常会说:不同的浏览器有不同的内核组成

  • Gecko:早期被Netscape和Mozilla Firefox浏览器浏览器使用;
  • Trident:微软开发,被IE4~IE11浏览器使用,但是Edge浏览器已经转向Blink;
  • Webkit:苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用;
  • Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge、Opera等;

事实上,我们经常说的浏览器内核指的是浏览器的排版引擎:

  • 排版引擎(layout engine),也称为浏览器引擎(browser engine)、页面渲染引擎(rendering engine)或样版引擎。

那么,JavaScript代码由谁来执行呢?

  • JavaScript引擎

五、JavaScript运行引擎

1.认识JavaScript引擎

为什么需要JavaScript引擎呢?

  • 我们前面说过,高级的编程语言都是需要转成最终的机器指令来执行的;
  • 事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最后都是需要被CPU执行的;
  • 但是CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行;
  • 所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成CPU指令来执行;

比较常见的JavaScript引擎有哪些呢?

  • SpiderMonkey:第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者);
  • Chakra:微软开发,用于IT浏览器;
  • JavaScriptCore:WebKit中的JavaScript引擎,Apple公司开发;
  • V8:Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出;

2.浏览器内核和JS引擎的关系

这里我们先以WebKit为例,WebKit事实上由两部分组成的:

  • WebCore:负责HTML解析、布局、渲染等等相关的工作;
  • JavaScriptCore:解析、执行JavaScript代码;

小程序中也是这样的划分:

  • 在小程序中编写的JavaScript代码就是被JSCore执行的;

在这里插入图片描述

在这里插入图片描述

六、JavaScript应用场景

1.著名的Atwood定律

Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律:

  • Any application that can be written in JavaScript, will eventually be written in JavaScript.

  • 任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现。

2.JavaScript应用越来越广泛

在这里插入图片描述

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

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

相关文章

Android JNI系列详解之ndk编译工具环境变量配置

一、前提 之前是只介绍了CMake编译工具的使用,现在介绍另一种原生(NDK自带的脚本工具)自带的编译方式:ndk-build,想要使用ndk-build编译工程,我们需要配置全局的环境变量。 二、配置环境变量 找到ndk在电脑…

HRS--人力资源系统(Springboot+vue)--打基础升级--(六)分页查询 + 重置按钮

一:先弄个简单的重置按钮 1.界面设计就放在搜索框同一列的位置 2. 在点击重置按钮时,清空搜索框内的内容,同时触发一次无条件查询(这个写法有bug,下面会有说明) 二:做分页 在MyBatis中,有多种方法可以实现分…

【报错记录】疯狂踩坑之RockyLinux创建Raid1镜像分区,Raid分区在重启后消失了!外加华硕主板使用Raid模式后,硬盘在系统中无法找到问题

前言 为了摆脱对于专业NAS的依赖,我决定专门使用一台Linux服务器安装NAS程序的方式实现NAS功能,这里就需要用到Raid功能,由于目前我只有3块SSD(256G500G500G),在ChatGPT的推荐下还是使用一个256G系统盘2块…

HTTP 框架修炼之道 | 青训营

Powered by:NEFU AB-IN 文章目录 HTTP 框架修炼之道 | 青训营 走进 HTTP 协议HTTP 框架的设计与实现应用层中间件层路由设计协议层 传输层(网络层)1. BIO(Blocking I/O):2. NIO(Non-blocking I/O):区别&…

【 Python 全栈开发 - 人工智能篇 - 45 】集成算法与聚类算法

文章目录 一、集成算法1.1 概念1.2 常用集成算法1.2.1 Bagging1.2.2 Boosting1.2.2.1 AdaBoost1.2.2.2 GBDT1.2.2.3 XgBoost 1.2.3 Stacking 二、聚类算法2.1 概念2.2 常用聚类算法2.2.1 K-means2.2.2 层次聚类2.2.3 DBSCAN算法2.2.4 AP聚类算法2.2.5 高斯混合模型聚类算法 一、…

39、springboot的前端静态资源的WebJar支持(bootstrap、jquery等)及自定义图标和首页

★ WebJar支持 Spring Boot支持加载WebJar包中的静态资源(图片、JS、CSS), WebJar包中的静态资源都会映射到/webjars/**路径。——这种方式下,完全不需要将静态资源复制到应用的静态资源目录下。只要添加webjar即可。假如在应用的…

145. 二叉树的后序遍历

题目来源:力扣 题目描述: 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1]示例 2: 输入:root [] 输出:[]…

C#---第二十: partial修饰类的特性及应用

0.知识背景 局部类型适用于以下情况: 类型特别大,不宜放在一个文件中实现。一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。需要多人合作编写一个类 局部类型的限制: 局部类型只适用于类、接口、结构&am…

信息化发展1

信息的定义 1 、信息论的奠基者香农认为: 信息是用来消除随机不定性的东西。 2 、信息的目的是用来“消除不确定的因素” 。信息是抽象于物质的映射集合。 3 、香农用概率来定量描述信息的公式如下: 信息的特征 客观性:信息是客观事物在人…

PostgreSQL分区表

什么是分区表 数据库分区表将表数据分成更小的物理分片,以此提高性能、可用性、易管理性。分区表是关系型数据库中比较常见的对大表的优化方式,数据库管理系统一般都提供了分区管理,而业务可以直接访问分区表而不需要调整业务架构&#xff0c…

QT版权查询

文章目录 QT工具版权QT模块版权查询 根据条件自动筛选: Qt Features, Framework Essentials, Modules, Tools & Add-Ons QT工具版权 Licensing QT模块版权查询 在 All Modules 中点击进入每个模块,在详细内容中一般有Lisence相关内容。 Licens…

c语言练习题35:求两个数二进制中不同位的个数

求两个数二进制中不同位的个数 //编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? //输入例子 : //1999 2299 //输出例子 : 7 //int calc_diff_bit(int m, int n) 思路: 1. 先将m和n…

Mybatis中的缓存机制(一文带你弄懂)

Mybatis中的缓存机制 Mybatis中的缓存机制概述项目结构MyBatis 一级缓存一级缓存原理代码测试什么时候一级缓存失效? Mybatis二级缓存测试代码⼆级缓存的失效⼆级缓存的相关配置 MyBatis集成EhCache Mybatis中的缓存机制 概述 缓存的作⽤:通过减少IO的⽅式&#…

数据结构--树4.2.1(二叉树)

目录 一、二叉树的存储结构 二、二叉树的遍历 一、二叉树的存储结构 顺序存储结构:二叉树的顺序存储结构就是用一维数组存储二叉树中的各个结点,并且结点的存储位置能体现结点之间的逻辑关系。 链式存储结构:二叉树每个结点最多只有两个孩…

英国选校8.27

目录 IC帝国理工学院 UCL伦敦大学学院 爱丁堡 曼彻斯特 KCL伦敦国王学院 Bristol布里斯托 华威 南安普顿 IC帝国理工学院 UCL伦敦大学学院 爱丁堡 曼彻斯特 KCL伦敦国王学院 24qs专业位置双非con雅思气候备注40 移动&个人通信 24fall不要双非? 24fall新…

通俗理解DDPM到Stable Diffusion原理

代码1:stabel diffusion 代码库代码2:diffusers 代码库论文:High-Resolution Image Synthesis with Latent Diffusion Models模型权重:runwayml/stable-diffusion-v1-5 文章目录 1. DDPM的通俗理解1.1 DDPM的目的1.2 扩散过程1.3 …

【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2&…

超详细教程:如何在笔记本上run起大模型?没有GPU也可以!(Windows/Mac)

在笔记本上Run起大模型 好久不见的前言环境搭建Mac环境搭建conda环境python环境安装pytorch安装transformers Windows环境搭建conda环境 (可选)python环境 模型下载方式一:通过git下载方式二:直接通过文件链接下载方式三:通过huggingface官方…

LangChain-Chatchat:基于LangChain和ChatGLM2-6B构建本地离线私有化知识库

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 自从去年GPT模型火爆以来,降低了很多个人和企业进入…

09-微信小程序 网络请求API(实现轮播广告和简易的聊天窗口)

09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口) 文章目录 微信小程序API服务器域名配置注意网络相关APIrequestRequestTask 请求任务对象object.success 回调函数object.fail 回调函数案例代码(实现轮播图) WebSocket案例代码(实现…