160、闭包、高阶函数、重载、多态、原型链、标记清除

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)回收它们所占用的内存空间
 

 

 

 

上一篇:[leetcode 周赛 160] 1240 铺瓷砖


下一篇:从零开始的刷LeetCode生活 第15期 151-160