JS笔记
2016-01-19 23:19
627 查看
【闭包】 链接: 闭包详解
Js代码
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();
// 999
nAdd();
result();
// 1000
f2倍赋予全局变量,这导致f2始终在内存中,而f1是f2的父级是f2依赖的存在,因此也导致了f1一直在内存中不会被回收。
闭包使用注意点:
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。
Js代码
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();
// 999
nAdd();
result();
// 1000
f2倍赋予全局变量,这导致f2始终在内存中,而f1是f2的父级是f2依赖的存在,因此也导致了f1一直在内存中不会被回收。
闭包使用注意点:
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。
相关文章推荐
- js005-引用类型
- js原型与原型链
- javascript笔记1-基本概念
- 理解D3js中的enter,exit方法
- 你不知道的JavaScript细节整理
- Extjs5.0 学习之路【结构篇】
- javascript性能优化之循环的选择
- 页面元素用JS动态添加的有效事件绑定方式
- 初学JSP和servlet
- js 打印出对象方法
- ExtJS Alias, xtype and widget
- ExtJS stores - load JSON only once
- ExtJS timeout
- json知识讲解
- 2016 系统设计第一期 (档案一)MVC ajax 获取json数据
- 1027: [JSOI2007]合金
- javascript性能优化之局部变量的使用
- bzoj1449: [JSOI2009]球队收益
- Javascript 闭包详解!
- 四种方法解析JSON数据