重庆市建设工程管理协会网站,wordpress 发表文章插件,学装修设计,搜索引擎营销的优势闭包是什么#xff1f;了解闭包首先了解js的‘链式作用域’结构#xff0c;对象可以一级一级的向上查找父对象的变量#xff0c;所以父对象的变量对子对象可见#xff0c;反之不成立#xff1b;所以都可以访问全局变量
为了解决函数外部无法访问函数内局部变量的问题…闭包是什么·了解闭包首先了解js的‘链式作用域’结构对象可以一级一级的向上查找父对象的变量所以父对象的变量对子对象可见反之不成立所以都可以访问全局变量
·为了解决函数外部无法访问函数内局部变量的问题就在父函数中定义一个子函数并让它访问了父函数的局部变量再通过父函数返回该子函数就实现了调用局部变量的效果·而上面中的子函数就是闭包所以闭包的定义是“能够读取其他函数内部变量的函数”其实简单理解就是“一个定义在函数中的函数”
示例function parent(){ var a1,b2; function child(){ console.log(ab); } return child; } var func1parent(); //这是将子函数返回给变量 func1(); 使用闭包有什么好处在内存中维持一个变量由于闭包f1中的n只有通过f2方法访问到无法通过其他途径访问修改从而达到了保护变量安全的效果通过闭包实现了js私有属性和私有方法的效果function f1(){//闭包f2被外引用始终存在内存中而它所依赖的f1也会始终存在//所以n,m都是始终存在删除闭包直接f1nulln1,m100; maddfunction(){m10;alert(m);} //全局变量maddfunction f2(){n1;alert(n);}return f2;}var af1(); //将子函数返回赋值给了变量aa();madd(); //madd的值是一个匿名函数同时是一个闭包实现了外部对函数内部进行操作a();使用闭包的注意点
·闭包会使函数中的变量一直存在内存上会导致内存消耗过大所以不能滥用闭包否则会造成网页性能问题IE可能会造成内存溢出。最好的方式是在退出闭包前将不必要的局部变量删除。
·JavaScript垃圾回收机制如果一个对象不再被引用那么这个对象就会被GC回收如果两个对象相互引用而不再被第三方引用那么这两个对象会被GC回收上述父函数被子函数引用子函数又被外部c引用这就是父函数不被回收的原因
·作用域链时为了保证在执行环境中有权访问的变量和方法是有序的只能向上访问到window终止即作用域链向下访问是不被允许的