邂逅JavaScript

前言:前端三大核心

前端开发最主要需要掌握的是三个知识点: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.rhkb.cn/news/108336.html

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

相关文章

CNN 02(CNN原理)

一、卷积神经网络(CNN)原理 1.1 卷积神经网络的组成 定义 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经…

LLM-chatgpt训练过程

流程简介 主要包含模型预训练和指令微调两个阶段 模型预训练&#xff1a;搜集海量的文本数据&#xff0c;无监督的训练自回归decoder&#xff1b; O T P ( O t < T ) O_TP(O_{t<T}) OT​P(Ot<T​)&#xff0c;损失函数CE loss指令微调&#xff1a;在输入文本中加入…

在ubuntu上部署label-studio

1. 安装label-studio 由于服务器的默认python3版本太低&#xff0c;尝试了很多方法&#xff0c;没有升级。因此采用annaconda方式安装label-studio. a.安装anaconda: 参照如下链接&#xff0c;安装anaconda。 Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能

为何 Hyperf 能够在两个端口上监听 WebSocket 连接&#xff1f; 源码角度来看&#xff0c;在配置了多个 Servers 时&#xff0c;实际上&#xff0c;只启动了一个 Server 注&#xff1a;我之前接触的代码都是启动一个服务绑定一个端口&#xff0c;之前也看过 swoole 扩展的文档…

【el-tree】树形组件图标的自定义

饿了么树形组件的图标自定义 默认样式: 可以看到el-tree组件左侧自带展开与收起图标,咱们可以把它隐藏:: .groupList {::v-deep .el-tree-node { .el-icon-caret-right {display: none;} } } 我的全部代码 <div class"groupList"><el…

[NLP]深入理解 Megatron-LM

一. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架&#xff0c;用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行&#xff08;Data Parallelism&#xff09;&#xff0c;张量并行&#xff08;Tensor Parallelism&#xff09;和流水线并…

DML语句的用法(MySQL)

文章目录 前言一、DML介绍二、DML语句操作1、给指定字段添加数据2、给全部字段添加数据3、批量添加数据4、修改数据5、删除数据 总结 前言 本文主要介绍SQL语句中DML语句的用法。 在实验开始之前我们先创建一下所要使用表&#xff0c;如下图所示&#xff1a; 一、DML介绍 DM…

matlab使用教程(22)—非线性优化函数的设置

1.设置优化选项 可以使用由 optimset 函数创建的 options 结构体来指定优化参数。然后&#xff0c;可以将 options 作为输入传递给优化函数&#xff0c;例如&#xff0c;通过使用以下语法调用 fminbnd x fminbnd(fun,x1,x2,options) 或使用以下语法调用 fminsearch x f…

单片机IO模拟串口协议

一、前言 嵌入式硬件平台调试中常用的debug方法是看串口打印定位问题&#xff0c;但有时候会遇到单片机没有串口外设或者串口引脚被占用的情况&#xff0c;这时候也可以在代码里操作空闲的IO输出不同个数的脉冲来达到调试的效果&#xff0c;但是要用逻辑分析仪抓线逐个看波形比…

js深拷贝三种方法

使用递归函数实现深拷贝 const obj {name: zzz,age: 18,hobby: [篮球, 足球],family: {baby: baby}} // 深拷贝 数组 对象 一定要先筛数组再筛对象,因为万物皆对象function deepcopy(newObj, oldObj) {for (const k in oldObj) {// 判断值是否属于array类if (oldObj[k] i…

01-jupyter notebook的使用方法

一、Tab补全 在shell中输入表达式&#xff0c;按下Tab&#xff0c;会搜索已输入变量&#xff08;对象、函数等等&#xff09;的命名空间&#xff1a; 除了补全命名、对象和模块属性&#xff0c;Tab还可以补全其它的。当输入看似文件路径时 &#xff08;即使是Python字符串&…

云计算服务体系-架构真题(十四)

云计算服务体系结构SaaS、PaaS、IaaS相对应分别&#xff08;&#xff09;。 答案。应用层、平台层、基础设施层 (2022)给定关系模式R(U,F)&#xff0c;其中U为属性集&#xff0c;F是U的一组函数依赖&#xff0c;那么函数依赖的公理系统(Armstrong)中分解规则是指&#xff08;&…

JavaSE学习——异常

目录 一、异常概述 二、异常的体系结果 二、异常的处理&#xff1a;抓抛模型 三、try-catch-finally的使用 四、throws 异常类型 的使用 五、开发中如何选择使用try-catch-finally还是使用throws&#xff1f; 六、自定义异常 自定义异常步骤&#xff1a; 七、总结&a…

VR/AR/眼镜投屏充电方案(LDR6020)

VR眼镜即VR头显&#xff0c;也称虚拟现实头戴式显示设备&#xff0c;随着元宇宙概念的传播&#xff0c;VR眼镜的热度一直只增不减&#xff0c;但是头戴设备的续航一直被人诟病&#xff0c;如果增大电池就会让头显变得笨重影响体验&#xff0c;所以目前最佳的解决方案还是使用VR…

实时同步ES技术选型:Mysql+Canal+Adapter+ES+Kibana

基于之前的文章&#xff0c;精简操作而来 让ELK在同一个docker网络下通过名字直接访问Ubuntu服务器ELK部署与实践使用 Docker 部署 canal 服务实现MySQL和ES实时同步Docker部署ES服务&#xff0c;canal全量同步的时候内存爆炸&#xff0c;ES/Canal Adapter自动关闭&#xff0c…

设计模式--工厂模式(Factory Pattern)

一、 什么是工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的接口&#xff0c;但是将对象的实例化过程推迟到子类中。工厂模式允许通过调用一个共同的接口方法来创建不同类型的对象&#xff0c;而无需暴露对…

wireshark 流量抓包例题重现

[TOC](这里写目录标题 wireshark抓包方法wireshark组成 wireshark例题 wireshark抓包方法 wireshark组成 wireshark的抓包组成为&#xff1a;分组列表、分组详情以及分组字节流。 上面这一栏想要显示&#xff0c;使用&#xff1a;CtrlF 我们先看一下最上侧的搜索栏可以使用的…

LAMP架构详解+构建LAMP平台之Discuz论坛

LAMP架构详解构建LAMP平台之Discuz论坛 1、LAPM架构简介1.1动态资源与语言1.2LAPM架构得组成1.3LAPM架构说明1.4CGI和astcgi1.4.1CGI1.4.2fastcgi1.4.3CGI和fastcgi比较 2、搭建LAMP平台2.1编译安装apache httpd2.2编译安装mysql2.3编译安装php2.4安装论坛 1、LAPM架构简介 1.…

Mysql--技术文档--基本概念--《世界上最流行的关系型数据库之一》

官方网址 MySQL 阿丹&#xff1a; 作为关系型数据库管理的老大哥&#xff0c;一个合格的程序员多多少少一定要了解mysql库。 官方解释 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管…

SpringCache

SpringCache是Spring提供的一个缓存框架&#xff0c;在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中&#xff0c;在4.1开始&#xff0c;缓存已支持JSR-107注释和更多自定义的选项。 Spring Cache利用了AOP&#xff0c;实现了基于注解的缓存功能&#xff0c;并且进…