测试对JS闭包的理解

目的是实现一个初始值是1,输出,+1,输出,-1,输出

最后想要的结果是 1 2 1

	var a = function(n)
	{
		var all = 1;		
		if(n == "show") {
			return function() { return all; };
		} else if( n == "add_one") {
			return function() { all += 1; return "Add One!"; };
		} else if( n == "sub_one") {
			return function() { all-= 1; return "Sub One!"; };
		}
	};
	document.writeln(a("show")()); //show
	document.writeln(a("add_one")()); //+1
	document.writeln(a("show")()); //show		
	document.writeln(a("sub_one")()); // -1
	document.writeln(a("show")()); //show

B  

	var a = function(n)
	{
		var all = 1;
		return (function() {
			if( n == "show") return all;
			else if( n == "add_one") { all+=1; return "Add One!"; }
			else if( n == "sub_one") { all-=1; return "Sub One!"; }
		});
	};
	document.writeln(a("show")()); //show
	document.writeln(a("add_one")()); //+1
	document.writeln(a("show")()); //show		
	document.writeln(a("sub_one")()); // -1
	document.writeln(a("show")()); //show
	

C

	var a = function()
	{
		var all = 1;
		return (function(n) {
			if( n == "show") return all;
			else if( n == "add_one") { all+=1; return "Add One!"; }
			else if( n == "sub_one") { all-=1; return "Sub One!"; }
		});
	};
	var xx = a();
	document.writeln(xx("show")); //show
	document.writeln(xx("add_one")); //+1
	document.writeln(xx("show")); //show		
	document.writeln(xx("sub_one")); // -1
	document.writeln(xx("show")); //show

D

var a = function()
	{
		var all = 1;		
		return function(n) {
			if(n == "show") {
				return function() { return all; };
			} else if( n == "add_one") {
				return function() { all += 1; return "Add One!"; };
			} else if( n == "sub_one") {
				return function() { all-= 1; return "Sub One!"; };
			}
		};
	};

	var b = a();
	document.writeln(b("show")()); //show
	document.writeln(b("add_one")()); //+1
	document.writeln(b("show")()); //show		
	document.writeln(b("sub_one")()); // -1
	document.writeln(b("show")()); //show

哪些是正确答案呢?? 献给JS爱好者,检测一下对闭包的理解~

posted @ 2011-05-17 01:55  来日方糖  阅读(296)  评论(0编辑  收藏  举报