摘要:
关于遍历的那些事儿 一、传统遍历 所谓传统遍历,是区别于 ES6 遍历器的遍历 1. 遍历数组 1.1 for, while 遍历一个数组,可以使用 for、while 循环。 1.2 实例的迭代方法 又或者调用 ES5 给 Array 原型添加的 5 个迭代方法。这 5 个迭代方法接受两个参数: 阅读全文
摘要:
页面性能优化 一、静态资源加载优化 1.1 提高静态资源加载速度 用字蛛对字体包进行压缩 对图片进行无损压缩 给静态资源上 CDN 加速 或 阿里云 OSS 对象存储 1.2 减少一次性请求加载的资源数量 图片懒加载 二、减少不必要的重新渲染 修改元素的样式后,再读取它的以下属性,会立刻强制触发页面 阅读全文
摘要:
async 实现原理分析 一、简要概述 async 函数,是一种对异步函数更加优雅的处理方式,本质是 Generator 函数的语法糖。所以为了更好的阅读本博客,建议对以下知识点有所了解: 遍历器对象(Generator 函数的返回值是一个遍历器对象) Generator 函数基础语法(函数定义、y 阅读全文
摘要:
promise polyfill 代码分析 一、整体框架介绍 分析 Promise,我们可以从三个阶段入手: new Promise(fn) 创建一个 promise 实例时 p.then(...) 指定 promise 的回调函数时 异步函数执行到 resolve(vl) 或 reject(vl) 阅读全文
摘要:
call apply bind 的模拟 一、先复习一下 为了应对 function 复杂多变的 this 指向,ES3提出了 call、apply 两种函数方法来显示绑定函数的 this,ES5 也提出一种 bind 方法来达到类似的效果。 下面我们复习一下这三种方法的使用。 let obj = { 阅读全文
摘要:
说一说 this 一、你真的了解 this 吗 我们判断 this 一般奉承一个准则:this 指向调用函数的对象。但是这个理解个人觉得还是有点浅薄不够全面。 废话不多说,先上道题目: let obj = { fun: function() { console.log(this); } }; obj 阅读全文
摘要:
闭包 一、 闭包原理 1. 前景知识 变量对象:每一个函数执行的时候都会用 参数、局部变量来生成自己的变量,这种叫 AO。全局的变量对象是是 window,叫 GO。 作用域链生成: 定义函数的时候:定义函数时所在的执行环境也有一个作用域链,这个作用域链会被保存在函数的内部**[[Scope]]属性 阅读全文
摘要:
浏览器渲染原理分析 一、前景知识 浏览器引擎:浏览器有两个引擎,GUI渲染引擎和 js 引擎,这两个引擎的工作的线程是互斥的,具体原因后面再说。 布局和绘制:生成渲染树后,浏览器计算元素大小和位置来 flow 生成布局,然后进行 paint 绘制,这一步合起来,叫做渲染 render 重绘:对 DO 阅读全文
摘要:
js 和 node 里面的事件循环 前言: 之前有接触过 js 事件循环,感觉比较容易理解。后面学习《深入浅出node.js》的时候,发现里面提到的事件循环有点绕比较难理解,后面查了一些资料和博客后,发现 node 环境下的事件循环和我之前接触的事件循环是有一定的区别的。 一、js 的事件循环 废话 阅读全文
摘要:
原型与原型链 首先,可以肯定的是,原型,是一个对象(这是一句废话)。 一、原型与构造函数 《JavaScript高级程序设计》是这样说的: 无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个 prototype 属性,这个属性指向函数的原型对象。默认情况下,所有原型对象自动获 阅读全文