var results=count(); var f1=results[0]; var f2=results[1]; var f3=results[2]; console.log(f1(),f2(),f3());//16 16 16 /*结果解释——count()运行完才计算闭包函数,f1,f2,f3运行的时候i已经变成4*/
/*解决方案*/ /*先介绍立即执行的匿名函数的写法*/ var ans=(function(x){return x*x})(3);//函数整体用()括起来,最后赋值3立即执行 console.log(ans);//9
/*方法:循环变量用let*/ functioncountRight() { var arr = []; for (let i = 1; i <= 3; i++) {//循环变量声明用的let arr.push(function () {//向arr里添加函数 return i * i; }); } return arr; } var resultsRight=countRight(); var fRight1=resultsRight[0]; var fRight2=resultsRight[1]; var fRight3=resultsRight[2]; console.log(fRight1(),fRight2(),fRight3());//1 4 9