分类: js进阶

9 篇文章

虚拟DOM 和 diff 算法
虚拟DOM 用JS对象描述DOM的层次结构,DOM中的一切属性都在虚拟DOM中有对应的属性 优点 可以减少DOM操作。虚拟DOM可以将多次操作合并成一次操作,并且借助DIFF算法把多余的操作省掉跨平台。虚拟DOM不仅可以变成DOM,还可变成小程序、ios、安卓应用,因为他本质是一个JS对象 如下:sanbbdom的虚拟DOM样式 (sanbbdom…
手写 Promise
Promise是一个对象,保存着未来将要结束的事件,他有两个特征: 对象的状态不受内部影响,Promise对象代表一个异步操作,有三种状态,pending进行中,fulfilled已成功,rejected以失败,只有异步操作的结果,才可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。一旦状态改变,就不会在变,promise对象状态改变只有两…
手写EventBus
EventBus 又叫做 事件总线传值 ,本质是观察者模式的实现, 观察者模式就是 定义了对象间的一种一对多的关系,让多个观察这对象同事监听某一个主题对象,当一个对象发生改变时,所有依赖于他的对象将得到通知 他在 Node 中的使用,on 是用来监听事件 , emit 是用来触发事件 , 一旦emit触发了事件,on就会被监听到,从而触发回调。 c…
手写sleep函数
sleep 顾名思义 睡眠函数,他的作用是让下面的代码延迟一会在执行,效果等同于setTimeout函数,但是 setTimeout 在逐步延迟的使用中会出现回调地狱的情况。代码如下 setTimeout(()=>{  console.log("第一次打印")  setTimeout(()=>{   &nb…
JS模块化的几种规范
一个模块是能实现特定功能的文件,有了模块就可以方便的使用别人的代码,想要什么功能加载什么模块 common JS 模块化 开始于服务端的模块化, 同步定义的模块化,每个模块都有一个单独的作用域。 模块输出 const xxx = require(xxx) // 第三方模块: 参数为模块名(包名) // 自定义模块 参数为路径 模块引入 // 方式一…
深拷贝
实现一 : JSON序列化与反序列化 var a = { b:1, c:[1,2,3], d:{c1:'cccc1',c2:'cccc2'} } var str = JSON.parse(JSON.string(a)) 缺点: 反序列化深拷贝不支持函数不支持undefined不支持引用不支持Date不支持正则表达式不支持symbol 实例 …
手写bind
兼容版本 var slice = Array.prototype.slice; function bind(asThis){ var args = slice.call(arguments,1); var fn = this; return function(){ var agrs2 = slice.call(arguments,0); retur…
函数的环境
函数VS方法的区别 函数如果子程序有返回值,就一个函数(js的所有函数都有返回值);如果函数里面没写return,js会自动加上return.什么是子程序一个或多个语句组成完成特定功能且相对独立的称为子程序方法简单来说放在类或者对象中调用的函数,成为方法 (方法是比较特殊的函数) /**函数**/ function fun1(num){ conso…
async await 全解
promise的APIpromise的使用场景async/await promise的API 常规用法   let text = new Promise((resolve,reject)=>{       resolve("成功时返回")       reject("失败时…