《JavaScript百炼成仙》,简单但是挺有效的

news2024/9/24 5:33:39

编程之修,重在积累,而非资质。资质虽然重要,可是后天的努力更不可少

《JavaScript百炼成仙》是一本以玄幻小说的形式,来讲述JavaScript的知识。

此篇仅仅是我快速阅读《JavaScript百炼成仙》这本书的笔记,流水账笔记,望君一阅!

小说的主角为叶小凡【叶小凡,这个名字有点熟悉,也就是玄幻小说中常见主角的名字】,叶小凡是乐阳村中唯一一个具备修行JavaScript的甲等资质的孩子,于是就被送到千鹤派修炼JavaScript。

《JavaScript基础修炼要诀》

JavaScript是一种神奇的功法,修炼成以后,可以翻山倒海,足以称霸一方天地。

叶小凡来到千鹤派的青山院,得到一卷功法《JavaScript基础修炼要诀》

变量和字面量

《JavaScript基础修炼要诀》第一章:直接量,也就是我们常说的字面量,比如数字
字符串、布尔值等等。

字面量,只是一个值而已,在编程中,无法直接使用字面量。例如:数字5,在编程中是不能单独存在的。

而是通过定义一个变量来存储字面量。

变量,则是通过var来定义的,再将字面量赋值给该变量,通过变量来使用字面量。比如:

var num = 100;
if(num>10){
   console.log(num)
}

数据类型

在编程中,字面量是一种数据。

数据是分类型的,在JavaScript中,数据分为两种类型:原始数据类型和引用数据类型,有人将原始数据类型称为简单数据类型、引用数据类型称为复杂数据类型;有人将原始数据类型称为原生数据类型,引用数据类型称为对象数据类型。反正都是指向同一个类型,不同的叫法而已。不必过多纠结。

原始数据类型:number、string、Boolean、null、undefined、symbol和BigInt
引用数据类型:object

null是一个特殊的关键字,表示空值;
undefined,表示一个变量未定义。

引用数据类型object,是一种复合数据类型。

函数

函数是一组可以重复调用的代码语句,通过function关键字来定义。

JavaScript运行机制

JavaScript编译原理:JavaScript代码在运行之前,会经历一个编译过程,分为三个步骤:

  1. 分词,分词的目的就是将代码分解为有意义的代码块;
  2. 解析,JavaScript代码是不能直接运行的,只有通过对代码块进行编译之后才可以被识别,然后再通过JavaScript引擎执行代码逻辑。解析就是对分词后得到的代码块进行解析,生成一棵抽象的语法树。抽象语法树定义了代码本身,通过操作语法树可以准确定位到赋值语句、声明语句和运算语句。
  3. 代码生成,JavaScript引擎把语法树转换成可以执行的代码。比如:

var a = 90,效果如下图:
在这里插入图片描述

作用域

作用域就是在一个范围内查找变量,那么这个范围就是作用域。

在JavaScript中,作用域分为:全局作用域、函数作用域和块作用域。

闭包

闭包,其实就是函数嵌套,里面的函数可以访问外面函数的变量。

形成闭包的条件:

  1. 函数内有声明一个函数;
  2. 函数内部的函数调用外部函数的局部变量
  3. 外部函数把内部函数return出去。

一般情况下,我们在调用一个函数,里面的局部变量会在函数调用之后销毁。这就是全局作用域不能访问函数内部变量的原因。闭包的作用就是让函数的局部变量不随着原函数的销毁而销毁。比如:

function test() {
    let a = 0;
    return function (parma) {
        a = a + parma;
        console.log(a)
    }
}
let add = test();

add(1)
add(1)

这样每次在调用内部函数的时候,里面访问的都是同一个变量了。

使用闭包操作,可以减少很多不必要的全局变量。

自动执行函数

就是在定义之后就立即执行函数,一般是匿名函数。比如上面代码中,做一下修改:

let add = (function() {
    let a = 0;
    return function (parma) {
        a = a + parma;
        console.log(a)
    }
})();

add(1); //1
add(1); //2

后面的就是VUE和ES6,关于ES6和VUE还是用单独篇章来记录吧!

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

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

相关文章

MySQL进阶篇之InnoDB存储引擎

06、InnoDB引擎 6.1、逻辑存储结构 表空间(Tablespace) 表空间在MySQL中最终会生成ibd文件,一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。 段(Segment) 段,分为数据段&#x…

python基于vue微信小程序 房屋租赁出租系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2. 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行…

面试准备知识点与总结——(虚拟机篇)

目录JVM的内存结构JVM哪些部分会发生内存溢出方法区、永久代、元空间三者之间的关系JVM内存参数JVM垃圾回收算法1.标记清除法2.标记整理3.标记复制说说GC和分代回收算法三色标记与并发漏标的问题垃圾回收器项目中什么时候会内存溢出,怎么解决类加载过程三个阶段何为…

Docker 架构简介

Docker 架构 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&am…

【力扣-LeetCode】64. 最小路径和 C++题解

64. 最小路径和难度中等1430收藏分享切换为英文接收动态反馈给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入&#xff…

实例1:控制树莓派板载LED灯闪烁

实例1:控制树莓派板载LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。通过对树莓派板载LED灯的状态读写控制,熟悉树莓派本身的操作及Linux中文件的读写。掌握常见函数time.sleep(…

初识Hadoop,走进大数据世界

文章目录数据!数据!遇到的问题Hadoop的出现相较于其他系统的优势关系型数据库网格计算本文章属于Hadoop系列文章,分享Hadoop相关知识。后续文章中会继续分享Hadoop的组件、MapReduce、HDFS、Hbase、Flume、Pig、Spark、Hadoop集群管理系统以及…

rewrite中的if、break、last

目录 rewrite 作用: 依赖: 打开重定向日志: if 判断: location {} 本身有反复匹配执行特征 在 location 中加入 break 和 last (不一样) 加了break后,立刻停止向下 且 跳出。 加了last&#xf…

Windows 版本ffmpeg编译概述

在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#b…

使用vector<char>作为输入缓冲区

一、引言 当我们编写代码:实现网络接收、读取文件内容等功能时,我们往往要在内存中开辟一个输入缓冲区(又名:input buffer/读缓冲区)来存贮接收到的数据。在C里面我们可以用如下方法开辟输入缓冲区。 ①使用C语言中的数组&#x…

【Spring教程】1.Spring概述

1、概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…

Android Compose Bloom 项目实战 (四) : 主页

1. 前言 上篇文章 我们实现了 Compose Bloom项目的开发页,这篇文章接着上文,来介绍主页的开发。 2. 分析页面布局 根据UI稿我们可知,这个页面有一个底部切换的BottomBar,还有一个搜索框,一个横向的列表以及一个竖向的…

RNN GRU模型 LSTM模型图解笔记

RNN模型图解引用RNN模型GRULSTM深度RNN双向循环神经网络引用 动手学深度学习v2–李沐 LSTM长短期记忆网络3D模型–B站up梗直哥丶 RNN模型 加入了一个隐变量(状态),隐变量由上个隐变量和上一个输入而更新,这样模型就可以达到具有短期记忆的效…

加油站会员管理小程序实战开发教程10

上一篇我们介绍了计算距离及到店导航的功能,本篇我们介绍一下今日油价的功能。 如果要按日显示最新的数据,那么我们首先需要有数据源来存放每日的油价数据。这里涉及数据源的时候要考虑你的数据是只录入一条,还是每日录入一条。 录入一条呢,比较简单,但有个问题是如果我…

制作for arm64 cpu架构的docker镜像

我前段时间买了个阿里云,没有留意CPU的架构是ARM的,结果部署系统的时候就发现出问题了,部署在docker里的容器实例根本跑不起来,提示什么执行文件格式错误(“exec format error”)。 究其原因,…

spring注解方式整合Dubbo源码解析

系列文章目录 前言 本节我们的Dubbo源码版本基于2.6.x 在前一章我们的整合案例中,我们有几个比较关键的步骤: 在启动类上标注了EnableDubbo注解在provider类上面标注了Service注解来提供dubbo服务在消费的时候通过Reference注解引入dubbo服务在配置文件…

软考中级-面向对象

面向对象基础(1)类类分为三种:实体类(世间万物)、接口类(又称边界类,提供用户与系统交互的方式)、控制类(前两类之间的媒介)。对象:由对象名数据&…

【jumpServer 功能梳理】

用户管理 1.1 用户列表 创建jumpServe 账号 ;角色分为用户 管理员;更新账号信息;查看用户详情以及授权的资产; 1.2 用户组 用户组,这个组的意义在于用一个统称对接资源;用户组包含多个用户,可以操作增加删除…

LeetCode初级算法题:两数之和+斐波拉契数列多种java解法

目录7 两数之和题目描述:解题思路与代码暴力解法:解法一:二分查找解法二:双指针2 斐波那契数列题目描述:解题思路与代码![请添加图片描述](https://img-blog.csdnimg.cn/d06a95d7989b4794bd7f5f02fbd6f87e.png)解法一&…

spring之使用Spring的AOP

文章目录前言一、准备工作1、添加相应的依赖2、添加相应的命名空间3、创建目标类4、创建切面二、使用AOP1.在切面类中编写增强代码以及切点表达式2、开启aspectj的自动代理3、测试类4、测试结果前言 Spring对AOP的实现包括以下三种方式 1、Spring框架结合AspectJ框架实现的AOP…