vm.el.textContent 因为dom的更新是异步的。 进程是cpu资源分配的基本单位,线程是cpu调度的最小单位,进程是一个标签页,宏任务是有宿主环境发布的异步请求。线程是标签页的JS引擎,微任务是由JavaScript发起的异步请求。 webpack下的definePlugin()是用全局变量替换特定的值和属性,减少了import的操作,作为判断语句显示是否在页面执行逻辑。要用JSON.stringfily转成字符串,否则会当成变量报错。 闭包的表现形式: 返回一个函数,作为函数的参数传递,在定时器,事件监听,Ajax请求,IIFE立即执行函数。 解决循环问题:立即执行函数,块级作用域。 闭包函数从自身定义的作用域开始查找变量,逐层向上寻找,知道找到声明的变量进行打印输出。 JS实现继承: 1.在子构造函数执行使父类构造函数的this指向子类的实例,子类实例可以使用父类定义的属性,不过不能使用父类定义的方法。 2.使用原型链: 子类的原型对象等于父类的实例对象。 实现子类继承父类的属性和方法,不过子类的实例会共享父类属性的内存地址,导致子类实例1更改了对应的属性,子类实例2也会更改对应的属性。 3.将Parent.call(this),Child.prototype=new Parent()结合,不过会输出两次Parent(),造成性能浪费。此时会继承实例,也会继承方法。 4.组合继承的优化。Parent.call(this),Child.prototype=Parent.prototype。子类可以访问父类的属性和方法。到子类原型对象的构造函数指向父类构造函数,应该更正为Child.prototype.constructor=Child 5.组合继承的优化:寄生组合继承。Parent.call(this),Child.prototype=Object.create(Parent.prototype),Child.prototype.constructor=Child(修正子类原型对象构造函数的指向指向自身) 6.ES6引入后,用class函数继承,通过super()来继承父类的属性和方法。 类数组对象转成数组: 函数内部的arguments对象,dom集合,字符串,特殊的类数组对象,可以通过下标访问,可以使用str[0],可以使用str.length。 函数内部arguments对象的格式{0:0,1:1,length:2} 类数组对象不能使用数组的API 将类数组对象转化为数组: Array.from(arguments),Array.prototype.slice.call(arguments),array=[...arguments] forEach()执行时,不能被中断。可以使用every 和some。 数组的扁平化处理:flat(),reduce()