常见手写汇总
Js常见手写题总结间隔时间打印0-9每间隔1s打印一个数字。
async/await12345678(async () => { for (let i = 0; i < 10; ++i) { await new Promise(resolve => { console.log(i); setTimeout(resolve, 1000); }); }})();
模拟递归调用1234567891011const print = ...
apply、call、binf
apply()、call()、bind()每个Function对象都存在apply()、call()、bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
使用apply()、call()、bind()都能改变函数对象的this指向。
12345678910111213141516171819202122232425262728293031window.name = "A"; // 挂载到window对象的namedocument.name = "B"; // 挂载到document对象 ...
Set与WeakSet
Set与WeakSetSet对象允许存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象中的值不会重复。WeakSet对象允许存储对象弱引用的唯一值,WeakSet对象中的值同样不会重复,且只能保存对象的弱引用。
Set描述Set对象是值的集合,可以按照插入的顺序迭代它的元素,Set中的元素只会出现一次,即Set中的元素是唯一的,常用来作数组去重。
属性与方法
Set.prototype.constructor: 返回构造函数。
Set.prototype.size: 返回Set对象的值的个数。
Set.prototype.add(value): 在Set对象尾部添加一个元素,返回该S ...
async、await
async/awaitasync是ES7的与异步操作有关的关键字,其返回一个Promise对象,await操作符用于等待一个Promise对象,它只能在异步函数async function内部使用。async/await的目的是简化使用多个promise时的同步行为,并对一组Promises执行某些操作。正如Promises类似于结构化回调,async/await更像结合了generators和promises。
async语法1async function name([param[, param[, ... param]]]) { statements }
...
Js模块化导入导出
Js模块化导入导出CommonJs、AMD、CMD、ES6都是用于模块化定义中使用的规范,其为了规范化模块的引入与处理模块之间的依赖关系以及解决命名冲突问题,并使用模块化方案来使复杂系统分解为代码结构更合理,可维护性更高的可管理的模块。
CommonJSCommonJS是NodeJs服务器端模块的规范,根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性是对外的接口。加载某个模块,其实是加载该模块exports属性。总 ...
事件冒泡及阻止
事件冒泡及阻止当一个元素接收到事件的时候,会把他接收到的事件传给自己的父级,一直到window,当然其传播的是事件,绑定的执行函数并不会传播,如果父级没有绑定事件函数,就算传递了事件,也不会有什么表现,但事件确实传递了。事件冒泡的原因是事件源本身可能没有处理事件的能力,即处理事件的函数并未绑定在该事件源上。它本身并不能处理事件,所以需要将事件传播出去,从而能达到处理该事件的执行函数。
实例当点击id为i3的<div>时,浏览器会依次弹出3 2 1,这就是事件冒泡,此正方形处于叶节点上,对其操作的事件会向上进行冒泡,直到根节点。
123456789101112131415161718 ...
箭头函数
Js箭头函数箭头函数是ES6新增的语法,提供了一种更加简洁的函数书写方式,类似于匿名函数,并且简化了函数定义。
完整写法完整写法类似于匿名函数,省略了function关键字。
12345var s = (a,b) => { console.log(a, b); // 1 2 return a + b;}s(1,2);
123456// 相当于var s = function(a,b) { console.log(a, b); // 1 2 return a + b;}s(1,2);
省略小括号当参数只有1个时,可以省略小 ...
数组空位
Js中数组空位问题JavaScript中数组空位指的是数组中的empty,其表示的是在该位置没有任何值,而且empty是区别于undefined的,同样empty也不属于Js的任何数据类型,并且在JavaScript版本以及各种方法对于空位的处理也有不同,所以建议避免在数组中出现空位。
描述在JavaScript的数组是以稀疏数组的形式存在的,所以当在某些位置没有值时,就需要使用某个值去填充。当然对于稀疏数组在各种浏览器中会存在优化的操作,例如在V8引擎中就存在快数组与慢数组的转化,此外在V8中对于empty的描述是一个空对象的引用。在Js中使用Array构造器创建出的存在空位的问题,默认并不 ...
defineProperty
definePropertyObject.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象,也就是说,该方法允许精确地添加或修改对象的属性。
语法Object.defineProperty(obj, prop, descriptor)obj: 要定义属性的对象。prop: 要定义或修改的属性的名称或Symbol。descriptor: 要定义或修改的属性描述符。
属性描述符对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。存取描述符是由getter函数 ...
JavaScript异步机制
Js异步机制JavaScript是一门单线程语言,所谓单线程,就是指一次只能完成一件任务,如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来比较简单,执行环境相对单纯,坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应也就是假死状态,往往就是因为某一段Javascript代码长时间运行比如死循环,导致整个页面卡在这个地方,其他任务无法执行。
执行机制为了解决上述问题,Javascript将任务的执行模式分为两种:同步Synchronous与异步Asynchronous,同步或非同步,表明着是否需要将 ...