书说---闭包

闭包是一个函数,能够读取其他函数内部变量

  A书:闭包是一个函数,在创建时允许自身函数访问并操作自身函数以外的变量时所创建的作用域。换句话:闭包可以让函数访问所有​的变量和函数,只要这些变量和函数存在于该函数声明时的作用域就行。

 B书:闭包是指有权访问 另一个函数作用域中的变量 的函数

 C书:理解词法作用域的规则,就能容易理解闭包。函数内部变量可以保存在函数作用域内,这就是闭包​​(函数变量被隐藏在作用域链之内,函数将变量”包裹“起来)所有函数都是闭包,它们都是对象,闭包无处不在。

 D书:闭包使得函数可以继续访问定义时的词法作用域 依然持有对该作用域的引用,而这个引用就叫作闭包。无论通过何种手段将内部函数传递到所在的词法作用域以外,它都会持有对原始定义作用域的引用 无论在何处执行这个函数都会使用闭包。

看完这几本书,闭包的概念可有可无。闭包简单如函数,复杂的是搞清楚为什么能访问其他函数内部的变量。

小结:我挺喜欢百度百科解释的闭包,闭包就是能够读取其他函数内部变量的函数。标题即是总结!!

神奇之处:反链式作用域

 要了解闭包,先要知道作用域

作用域是:一套规则,根据名称查找变量的一套规则;

作用域规则:找不到向上级继续查找,直到全局作用域。无论找到还是找不到,查找到全局作用域后都会停止​​。换个比喻:父对象的变量,子对象都可见 反之则不行​。

简称:外部函数,读取不了内部函数变量(访问是链式,内部函数可以读取外部函数)

闭包神奇的地方:突破作用域,外部函数能读取内部变量

 A书:在函数作用域内,可以访问任意的函数变量

B书:是桥梁,是函数外部与内部连接的桥梁

 

 

神奇带来的利与弊

始终保持在内存:闭包里的变量会一直被引用,只有有引用就不会被销毁被垃圾回收。

内存泄露:增大内存使用量,浪费资源,影响性能。

函数的私有变量:其他函数不能,但闭包可以啊(外部读取内部变量)

 

难点:如何区分闭包与普通函数

闭包大多数的形式:函数里建函数(函数嵌套)、回调函数形式、调用一次结束调用、比其他函数更占内存

 

小结

  闭包是函数,可访问函数作用域内的变量,无处不在。长期被引用,始终保存在内存。

  闭包是桥梁,突破作用域限制(miraclous),是函数外部与内部连接的桥梁。允许函数私有变量。

 

posted @ 2018-09-19 11:17  冰锐格  阅读(125)  评论(0编辑  收藏  举报