真的了解javascript的闭包吗?几道题目可以知晓。。。
假设以下代码都在window域中执行,建议留下答案后在测试。
代码一:
1 | var test = []; |
2 | var list = [1,2,3]; |
3 | for ( var i = 1; i <= list.length; i++) { |
4 | ( function (i){ |
5 | test[i] = function (){alert(i)}; |
6 | })(i); |
7 | } |
8 | test[1](); |
代码二:
1 | function buildList(list) { |
2 | var result = []; |
3 | for ( var i = 1; i <= list.length; i++) { |
4 | result[i] = function () {alert(i)}; |
5 | } |
6 | return result; |
7 | } |
8 | var test = buildList([1,2,3]); |
9 | test[1](); |
代码三:
01 | function test(){ |
02 | var fun = function (){alert(num)}; |
03 | var chang = function (){++num;}; |
04 | var num = 2; |
05 | num++; |
06 | return {fun:fun,chang:chang}; |
07 | } |
08 | var funs = test(); |
09 | funs.fun(); |
10 | funs.chang(); |
11 | test().fun(); |
12 | test().chang(); |
13 | funs.fun(); |