测试对JS闭包的理解
目的是实现一个初始值是1,输出,+1,输出,-1,输出
最后想要的结果是 1 2 1
A
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爱好者,检测一下对闭包的理解~