请问执行结果为什么不是alert(1)?

function xxx(){
ss=[]
for(var i=0;i<6;i++) {
var ii= i;
var s = function () {
alert(ii)
}
ss[i] = s;
}
ss1;
}
:lol:

在执行函数的时候使用的是最后一个声明变量ii,之前声明的ii变量都会被覆盖

这个循环里面的ii最后已经变成5了,
function xxx(){
ss=[]
for(var i=0;i<6;i++) {
var ii = i;
ss[i] = "s("+ii+")";
}
eval(ss[1]);
}

var s = function (ii) {
alert(ii)
}
这样才是1

主要是内部函数对ii进行了引用
function xxx(){
ss=[]
for(var i=0;i<6;i++) {
var ii = i;
var s = function (y) {
return function(){
alert(y);
}
}(ii);
ss[i] = s;
}
ss1;
}
以上代码主要是执行函数吧ii作为参数传递。返回一个匿名函数以用参数y,这样返回的才是1