intopiece

Results 17 comments of intopiece

``` Promise.myAll = function(promises) { let results = []; let count = 0; let len = promises.length; return new Promise(function(resolve, reject) { if (!(promises instanceof Array)) return reject("arguments must be...

为了性能优化,把子元素上所需绑定的事件统一绑定到指定的父元素上,当触发了子元素,实际上第一响应的是父元素,会将对应事件往下传到对应元素,该阶段不执行事件。到目标阶段执行事件。再开始冒泡阶段,向上层元素传播事件,如果有元素绑定了该事件同样触发。 优点: 1. 减少了事件的注册,减少内存消耗。 2. 当子元素为动态增加的时候,不需要再次绑定事件 3. 只对它的父级(如果只有一个父级)这一个对象进行操作,与dom的操作就只需要交互一次,这样就能大大的减少与dom的交互次数,提高性能

闭包是有权访问另一个函数作用域中的变量的函数:当函数1向外暴露了可以改变内部局部变量的方法(内部匿名函数,外部函数2接受匿名函数,匿名函数作用域链在初始化时包含了函数1的变量对象,可以调用函数1所有的内部变量。一般函数执行完局部活动对象就会进行销毁,内存仅仅只会保存全局作用域,但函数1在执行完毕其活动对象也不会进行销毁,因为匿名函数的作用域链仍然在对其进行调用。(参考高程 作用:可以读取函数内部的变量,让变量的值始终保持在内存中。栗子:实现函数curry化。 注意:内存泄露。

因为setTimeout是异步宏任务,如果执行栈中的执行所用的时间超过了定时器设置的间隔时间,根据事件轮询机制,需清理完执行栈,task队列才会进入主线程执行,执行所有微任务,最后才是执行宏任务,所以setTimeout开始执行时间会被延迟,出现误差。

``` /** * 利用闭包的特性让参数暂时保存,让传入的参数与原函数所需参数数量进行比较,未达到则递归进行存储,待达到则一次性执行 * @param {*} fn 需要被柯里化的函数 * @param {...any} oldArgs 所存入的闭包的参数值 */ const currying = (fn, ...oldArgs) => (...newArgs) => { let args = [...oldArgs, ...newArgs]; if...

``` Promise.race = function (promises) { if (!(promises instanceof Array)) return reject("arguments must be an array"); return new Promise((resolve, reject) => { if (promises.length === 0) { return; } else...

> 同源策略 同源协议指的是页面若域名,端口,协议都相同,便具有相同的源。 目的是为了保证用户信息的安全,防止恶意的网站窃取数据。 解决这种同源策略的方法便成为跨域。 > JSONP JSONP是JSON with Padding的略称。允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。 > 原理 利用script标签的src属性调用资源不跨域的特性,向服务端请求同时传一个callback回调方法名作为参数,服务端接受函数名生成返回json格式资源的代码。 > 实现 ``` // 获取到跨域资源后的回调 var handleFn = function(data){ console.log(data) // JSONP跨域成功返回的资源 }; var url...

1. 动态创建script标签,可通过script的onreadyState监视加载。 2. html5新增的async属性:可跟其他内容并行下载,限制ie9以上,只能加载外部js脚本。 3. html4的defer,作用与async相同,兼容更好一点,但async只要加载完可立即执行,defer需等待在dom加载完毕后执行,在window.onload之前,其他没有添加defer属性的script标签之后。 4. 利用XHR异步加载js内容并执行。 5. iframe方式。

> Array.prototype.flat ``` [1, [2, [3, [4]], 5, [6]]].flat(Infinity) ``` > 递归 ``` const flattenDeep = (function() { let newArr = []; return function loop(array) { if (!(array instanceof Array))...

>寄生式继承 寄生式继承就是把原型式继承再次封装,然后在对象上扩展新的方法,再把新对象返回 ``` function createAnother(original){ var clone = Object.create(original); //通过调用函数创建一个新对象 clone.sayHi = function(){ //以某种方式来增强这个对象 console.log("hi"); }; return clone; //返回这个对象 } ``` - 优点:决子统一为原型式继承中返回的对象统一添加方法。 - 缺点:没用到原型,无法复用。