有道云笔记相关整理(一)
1.闭包与作用域
首先了解一个概念,在ES5之前,JS只存在全局作用域和函数作用域(ES6中let和const的使用让其增加了块级作用域,ps:块级作用域简而言之就是放在大括号中的内容),全局定义的变量在全局都可以被调用
关于闭包,简而言之,在父函数内部定义一个子函数来调用父函数的变量,并且通常将这个子函数作为返回值(这样才能让我们调用),通过这样的方式,使我们能够使一个函数访问另一个函数的变量。更多解释和例子详见:闭包详解
2.原型、原型链
首先,每个对象(“JS中万物皆对象”)都存在一个_proto_属性,而每一个函数对象都存在一个prototype属性,这个属性指向它的原型对象,原型对象主要存在两个方面的作用:①共享方法、属性,②继承(原型继承、组合继承等)
函数、原型、普通对象间的关系及原型链的形成
所有函数上存在prototype属性指向原型对象;实例对象中存在_proto_属性指向原型对象;所有原型对象上,有constructor属性指向构造函数,原型对象也是对象,所以也存在_proto_属性指向它的原型
这种原型_proto_不断指向下一级原型直到为null的形式便组成了原型链。
大致关系图如下:
图来源于网络PS:构造函数上同样存在constructor指向“它的构造函数”,为Function()
BaseInfo为构造函数3.Argument和Set
argument类数组,如其名,与数组类似,酷似obj(实际上数组和obj都是哈希表。。。);Set我们一般称其为集合,是es6引入的一种数据结构
很重要一点:argument类数组没有数组方法,所以我们一般会将其转换成数组再进行操作
Set集合没有重合元素(利用这一点可以实现数组去重),但是拥有自己的方法,3个遍历器(key、value、entries)分别对应(键、值、键值对)、1个遍历方法(与数组方法类似的foreach)
key都是从0开始,依次增加,但最后都有一个代表长度的key,argument为length,Set为size
关于类数组转数组思路方法:
①利用数组的slice方法,使用call指定类数组来调用
Array.propotype.slice.call(argument)
②遍历赋值,创建新数组,遍历argument传入新数组
③数组方法Array.from(argument) ; ps:es6新方法,该方法可传入可迭代对象(包括类数组和字符串)
4.setTimeout实现setInterval
①利用递归,在setTimeout()内部调用函数的时候,再调用自身,实现无限次的调用setTimeout
递归实现重复调用5.类的继承
①六大继承方式:原型链继承、利用构造继承、组合继承、原型式继承、寄生继承、寄生组合继承
链接:JS类的创建与继承
6.defineProperty方法
该方法用于给对象添加属性,存在三个参数:对象名、key、配置参数(含有多个属性,包括value、能否枚举enumerable(默认否)、能否修改writable(默认否)、get(读取了对象属性式调用)、set(修改对象属性时调用)等属性)
实现数据代理:
数据代理7.setTimeout和setInterval的运行机制
两个函数都是异步的,当执行到他们时,会先将执行语句移出本次执行,他们需要等待下一次的Event loop,也就是说,后面的同步任务执行完成后,才会执行这里的语句,并且,如果此时设置的时间还没有到,仍旧会将其移出该次执行,直到执行完本次的Event loop,进入下次循环
简单例子笔记详情:前端整理