js闭包

闭包

 ***代码

//**扩展点
//1.函数的特点: 函数运行后函数内分配的变量都会销毁,除非有返回值的变量才不会销毁
//2.js中由于链式作用域,子对象会一级一级地向上寻找所有父对象的变量。父对象的所有变量,对子对象都是可见的,反之就不行。
//3.函数声明时间,作用域就决定过了,所以不取决于它执行的时候,只取决于它声明的时候,这就是19行弹出来的是1,而不会是10了;


//**闭包的概念:
// 所谓的闭包并不是函数包含函数,闭包是形成了一个封闭的环境,闭包就是能够读取其他函数内部变量的函数
//,闭包可以是函数的内部和外部连接的桥梁,任何函数都会形成自己的闭包环境,都有自己的AO链.


//**闭包的作用
// 1.一个是可以读取函数内部的变量
// 2.另一个就是让这些变量的值始终保持在内存中


//**闭包注意的问题
// 话题:代码中a是c的父函数,而c被赋给了一个全局变量(指的是在window中了),
// 这导致c始终在内存中,而c的存在依赖于a,因此a也始终在内存中,不会在调用结束后,
// 被垃圾回收机制(garbage collection)回收;
// 1.所以导致的问题是内存消耗太大,造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,
// 将不使用的局部变量全部删除。
// 2.闭包会在父函数外部,改变父函数内部变量的值。如果你把父函数当作对象(object)使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,
// 不要随便改变父函数内部变量的值。


//**闭包和对象
// 闭包是穷人的对象,对象是穷人的闭包,闭包和对象只是实现的方式不同罢了;
//知识点:
//19行函数调用会弹出1,有两个回答:
//1.是**扩展点3中提到的.
//2.是因为后加加是在语句运行完后再加的。

原文地址:https://www.cnblogs.com/zhuzhu88/p/6675168.html