JavaScript
这是我博客中关于 JavaScript 的部分,主要是记录、归纳和总结自己在日常学习、阅读、工作过程中遇到的 JavaScript 问题。
读书笔记
深入系列
[第一篇]
了解 JavaScript 引擎JavaScript 引擎是一个专门处理 JavaScript 脚本的虚拟机,一般会附带在网页浏览器之中。
推荐阅读:
[第二篇]
了解 Google V8 引擎V8 是一个开源项目,也是一个 JavaScript 引擎的实现,其目的就是为了提高性能,最开始是由一些语言方面的专家设计出来的,后被 Google 收购。
参考资料:
[第三篇]
理解 V8 引擎工作原理从官网示例中初步理解 V8 引擎的工作方式。
推荐阅读:
[第四篇]
理解 JavaScript 编译执行流程尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植。
推荐阅读:
[第五篇]
深入 JavaScript 执行上下文执行上下文(简称-EC)是 ECMA-262 标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分,标准规范也没有从技术实现的角度定义 EC 的准确类型和结构。
推荐阅读:
[第六篇]
深入 JavaScript 变量对象JavaScript 编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是在 JavaScript 代码执行的时候,解释器是如何查找和使用这些函数和变量呢?我们引用这些对象的时候究竟发生了什么?
推荐阅读:
[第七篇]
深入 JavaScript this 关键字在程序语言中,
this
关键字与面向对象程序开发紧密相关,其完全指向由构造器新创建的对象。在 ECMAScript 规范中也是这样实现的,但在 ECMAScript 中,this
并不限于只用来指向新创建的对象。参考文章:
推荐阅读:
[第八篇]
深入 JavaScript 作用域任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。
参考文章:
推荐阅读:
[第九篇]
深入 JavaScript 作用域链简单解释就是,当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。
参考文章:
推荐阅读:
[第十篇]
深入 JavaScript 闭包根据函数创建的算法,所有的函数都是闭包,因为它们都是在创建的时候就保存了上层上下文的作用域链(除开异常的情况)。
参考文章:
[第十一篇]
深入 JavaScript 原型到原型链JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大。
参考文章:
推荐阅读:
专题系列
[第一篇]
JavaScript 命名函数表达式命名函数表达式可以让调试过程更方便,因为在调试的时候,命名函数表达式使调用栈中的每个项都使用自己的名字来描述。
参考文章:
[第二篇]
JavaScript Module 模式Javascript 脚本程序本来很小,在早期大多用来做独立的脚本任务,提供在需要的地方与 web 页面交互的能力,所以大的脚本一般不需要。过了几年,我们现在有了运行大量 Javascript 脚本的复杂程序,还有一些被用在其他环境。因此在最近几年考虑提供把 Javascript 脚本程序分割成部分模块在需要时进行导入变得有意义了。
参考文章:
[第三篇]
JavaScript 立即调用函数表达式IIFE( 立即调用函数表达式)是一个在定义时就会立即执行的 JavaScript 函数。
参考文章:
[第四篇]
JavaScript 面向对象 —— 封装Javascript 是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有 class(类)。
参考文章:
推荐阅读:
[第五篇]
JavaScript 面向对象 —— 继承继承,代码复用的一种模式。和其它高级程序语言相比,javascript 有点不一样,它是一门面向对象的语言,但没有类的概念,不过依然可以通过原型(prototype)来模拟对象的继承和多态。
参考文章:
推荐阅读:
[第六篇]
JavaScript 函数重载的实现JavaScript 函数没有签名,因为其参数是由包含零或多个值的数组来表示的。所以真正的重载是不可能做到的。但是,我们可以通过检查传入函数中参数的类型和数量并作出不同的反应,来模仿方法的重载。
参考文章:
[第七篇]
JavaScript 模拟 call 的实现如果不能使用 call、apply、bind,如何用 js 实现 call 或者 apply 的功能?
参考文章:
[第八篇]
JavaScript 模拟 apply 的实现如果不能使用 call、apply、bind,如何用 js 实现 call 或者 apply 的功能?
参考文章:
[第九篇]
JavaScript 模拟 bind 的实现如果不能使用 call、apply、bind,如何用 js 实现 call 或者 apply 的功能?
参考文章:
[第十篇]
JavaScript 模拟 new 的实现模拟实现 new 的功能。
参考文章:
[第十一篇]
JavaScript 数组操作合集在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,所以对这块内容有一个系统性的总结。
参考文章:
[第十二篇]
JavaScript 类型判断在开发中,类型的应用场景非常广泛,简单的有数字和字符串判断,进阶一点的有对象判断,所以对这块内容有一个系统性的总结。
参考文章:
[第十三篇]
JavaScript 深浅拷贝关于深浅拷贝问题,是 JavaScript 甚至编程语言的基础,这里做一个系统性的总结。
参考文章:
[第十四篇]
JavaScript 防抖与节流窗口的resize、scroll、输入框内容校验等操作时,如果这些操作处理函数是较为复杂或页面频繁重渲染等操作时,在这种情况下如果事件触发的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少触发的频率,同时又不影响实际效果。
参考文章:
[第十五篇]
JavaScript 判断对象相等在业务开发工作中,很多时候都会遇到判断两个变量是否相等的问题,这里做一个系统性的总结。
参考文章:
ES6 系列
[第一篇]
ES6 之迭代器迭代器(Iterator)就是一种统一的接口机制,来处理所有不同的数据结构。
参考文章:
[第二篇]
ES6 之生成器生成器(Generator)函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。
参考文章:
[第三篇]
ES6 之 PromisePromise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
参考文章:
[第四篇]
ES6 之 async函数async 函数是什么?一句话,它就是 Generator 函数的语法糖。
参考文章:
[第五篇]
ES6 之 defineProperty 与 proxydefineProperty 和 proxy 对于 vue 和 react 响应式系统的实现至关重要,这里做一个系统性的总结。
参考文章: