邂逅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应用越来越广泛

相关文章:
邂逅JavaScript
前言:前端三大核心 前端开发最主要需要掌握的是三个知识点:HTML、CSS、JavaScript 一、认识编程语言 1.计算机语言 前面我们已经学习了HTML和CSS很多相关的知识: 在之前我们提到过, HTML是一种标记语言, CSS也是一种样式语言; 他们本身都是属于计算…...
Android 中 Fragment判空
1. 判断 Fragment 是否已经被添加到 Activity 中,可以通过 Fragment 的 isAdded() 方法来判断。 2. 判断 Fragment 的 View 是否已经被创建,可以通过 Fragment 的 getView() 方法来判断。 3. 判断 Fragment 是否已经被销毁,可以通过 Fragme…...
软考高级系统架构设计师系列论文八十八:财务数据仓库系统的设计与实现
软考高级系统架构设计师系列论文八十八:财务数据仓库系统的设计与实现 一、摘要二、正文三、总结一、摘要 近年来,数据仓库技术在信息系统的建设中得到了广泛应用,有效地为决策提供了支持。2020年6月,本人所在单位组织开发了财务管理决策系统,该系统主要是使高层领导掌握企…...
fastdeploy部署多线程/进程paddle ocr(python flask框架 )
部署参考:https://github.com/PaddlePaddle/FastDeploy/blob/develop/tutorials/multi_thread/python/pipeline/README_CN.md 安装 cpu: pip install fastdeploy-python gpu :pip install fastdeploy-gpu-python #下载部署示例代码 git cl…...
【图论】拓扑排序
一.定义 拓扑排序是一种对有向无环图(DAG)进行排序的算法,使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系,例如在一个项目中,某些任务必须在其他任务之前完成。 拓扑排序的…...
自动化备份方案
背景说明 网上有很多教程,写的都是从零搭建一个什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,这次通过请教GitHub Copilot Chat,生成几个备份脚本,以备后用。 注…...
win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问
问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用,改为启动,不可以改动看第三条 打开设置,找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…...
github实用指令(实验室打工人入门必备)
博主进入实验室啦,作为一只手残党决定在这里分享一些常用的github使用情景和操作指南来解救其他手残党。 内容随着情景增加实时更新。如果只有没几个内容说明场景不多(相信对手残党而言是再好不过的消息) 情景一:…...
6. 激活层
6.1 非线性激活 ① inplace为原地替换,若为True,则变量的值被替换。若为False,则会创建一个新变量,将函数处理后的值赋值给新变量,原始变量的值没有修改。 import torch from torch import nn from torch.nn import …...
AIGC ChatGPT 制作地图可视化分析
地图可视化分析是一种将数据通过地图的形式进行展示的方法,可以让人们更加直观、快速、准确的理解和分析数据。以下是地图可视化分析的一些主要好处: 加强数据理解:地图可视化可以将抽象的数字转化为直观的图形,帮助我们更好地理解复杂的数据集。 揭示地理模式:地理位置是…...
2023-08-24 LeetCode每日一题(统计参与通信的服务器)
2023-08-24每日一题 一、题目编号 1267. 统计参与通信的服务器二、题目链接 点击跳转到题目位置 三、题目描述 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台…...
前端实习day35
今天是下早班的一天,下完班直接赶车回广州了,吐槽一下深圳站管理得真得差,候车厅小,人巨多,而且进站口的标识也很少,绕了好久才找到!下次再也不去了。 今天是改bug的一天,但是有半天…...
Linux安装jupyter notebook
1. Linux安装jupyter notebook 1.1 生成配置文件 这里在conda环境中安装。 jupyter notebook --generate-config --allow-root上面命令是生成配置文件,并且允许使用root用户运行。配置文件默认生成到~/.jupyter/jupyter_notebook_config.py。 具体解释如下&…...
【猿灰灰赠书活动 - 03期】- 【RHCSA/RHCE 红帽Linux认证学习指南(第7版) EX200 EX300】
说明:博文为大家争取福利,与清华大学出版社合作进行送书活动 图书:《RHCSA/RHCE 红帽Linux认证学习指南(第7版) EX200 & EX300》 一、好书推荐 图书介绍 《RHCSA/RHCE 红帽Linux认证学习指南(第7版) EX200 & E…...
当 Tubi 遇到 Ruby
有人说 Tubi 作为 RubyConf China 金牌赞助商,明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup,“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中,却依然让人想在 Tubi 展台前多停留一会儿。 为什么工程师、校友甚至 …...
【C++从0到王者】第二十四站:多态的底层原理
文章目录 前言一、虚函数表二、一道经典的例题三、深度剖析多态的条件之一:为什么必须是父类的指针或引用四、深度剖析多态的条件之二:为什么是虚函数的重写/覆盖?五、虚函数表的一些总结六、关于Func3的验证七、动态绑定与静态绑定八、总结 …...
Java从入门到精通24==》数据库、SQL基本语句、DDL语句
Java从入门到精通24》数据库、SQL基本语句、DDL语句 2023.8.27 文章目录 <center>Java从入门到精通24》数据库、SQL基本语句、DDL语句一、什么是数据库二、数据库的优缺点1、使用数据库的优点:2、使用数据库的缺点: 三、MySQL基本语句四、DDL语句 …...
学习ts(十)装饰器
定义 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,访问符,属性或参数上,是一种在不改变原类和使用继承的情况下,动态的扩展对象功能。 装饰器使用expression形式,其中expression必须…...
如何在 Opera 中启用DNS over HTTPS
DNS over HTTPS(基于HTTPS的DNS)是一种更安全的浏览方式,但大多数 Web 浏览器默认情况下不启用它。了解如何在 Opera 浏览器中启用该功能。 您可能不知道这一点,但您的网络浏览器并不像您希望的那样私密或安全。您会看到ÿ…...
STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块
今日学习一下这款AHT10 温湿度传感器模块,给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器: 特性: 连接方式: 适用场所范围: 程序设计: 设…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
