JS匿名函数&闭包相关

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的 执行需要依赖a中的变量。
当a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。
闭包作用:1.从外部作用域中获取局部函数内的变量

2.闭包内的局部变量始终保持在内存中


var a = function(b){//A
	var a = 5;
	alert('init');
	return function(c){//B 对于A来说,函数B为局部作用域,每次返回都是不同的引用
		alert((++a)+c);
	}
};
alert(a);//得到函数A的引用
a()(2);//a()函数执行,返回匿名函数B的引用 并传参数2,执行
a()(2);//a()函数执行,返回匿名函数B的引用 并传参数2,执行

var a = function(b){//A
	var a = 5;
	alert('init');
	return function(c){//B
		alert((++a)+c);
	}
}();//函数A执行,返回匿名函数B的引用
alert(a);//得到函数B的引用
a(2);//传参数2,执行
a(2);//传参数2,执行

function foo(x) {//A
	var tmp = 3; 
	//alert('init');
	return function (y) {//B
		alert(x + y + (++tmp)); 
	}	 
}
alert(foo(2));
(foo(2))(10);//foo(2)函数foo执行返回函数B的引用,(foo(2))作为函数表达式,传参执行
(foo(2))(10);//同上
var a = foo(2);//存取函数B的引用
a(10);//传参执行
a(10);//同上

//闭包与类
function Person() {  
    var id;  
    this.getId = function() {  
        return id;  
    }  
    this.setId = function(newId) {  
        id = newId;  
    }  
}  
var p = new Person();  
p.setId(1000);  
alert(p.getId()); // 1000  
alert(p.id); // undefined  

参考&值得推敲:

http://www.cnblogs.com/yuzhongwusan/archive/2011/11/10/2244709.html

http://blog.sina.com.cn/s/blog_68cb8c790100yu61.html

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值