1、闭包 定义来源1:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 定义本身1:内部函数可以访问外部函数作用域,外部函数不能直接访问内部函数的作用域,即函数内部不会受外部干扰。函数的这种机制叫做闭包。 定义来源2:《JavaScript高级程序设计》第178页 定义本身2:有权(能夠)访问另一个函数作用域中的变量的函数。 闭包的特征:函数中的函数 好处:闭包可以作为返回值被函数外部的变量引用,这样函数外部就可以访问函数内部的变量,减少全局变量。 坏处:导致函数的作用域不能释放,占用内存。 2、高阶函数 定义:操作其他函数的函数,比如map、forEach 3、关于重载 Java可以为一个函数定义两个定义,只要这两个定义的签名(参数的类型和数量)不同即可。JS没有签名,所以不能重载。 4、多态 同一操作作用于不同的对象上面,可以产生不同的执行结果。比如你说“叫”,鸭子听了会发出“嘎嘎声”,鸡听了会发出“咯咯声”。 5、原型链 var obj = {} function fn(){} //1、对象与函数的原型 obj.__proto__ === Object.prototype; fn.__proto__ === Function.prototype; fn.prototype={}; fn.prototype.__proto__ === Object.prototype Drag.prototype.__proto__=EventEmitter.prototype;//这是更安全的继承方法,一般在Node里都是采用这种方式实现继承。IE不支持 Drag.prototype=new EventEmitter;//相对这种方式来说,上边的写法更安全 //2、对象类与函数类的原型 Object.prototype={}; Object.prototype.__proto__ === null; Function.prototype={}; Function.prototype.__proto__ === Object.prototype //3、对象类与函数类所在类的原型 Object.__proto__ === Function.prototype Function.__proto__ === Function.prototype //https://www.jianshu.com/p/686b61c4a43d 6、5的自裁题 obj.__proto__ = fn.__proto__ = fn.prototype= fn.prototype.__proto__ = Object.prototype= Object.prototype.__proto__ = Function.prototype= Function.prototype.__proto__ = Object.__proto__ = Function.__proto__ = 7、标记清除 去掉下列变量的标记: (1)环境中的变量 (2)被环境中的变量引用的变量 最后: (1)销毁那些带标记的变量 (2)回收它们所占用的内存空间