JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题_Javascript教程-查字典教程网
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下:functioncreateArray(){vararr=newArray();for(vari=0;i

复制代码 代码如下:

<script type="text/javascript">

function createArray() {

var arr = new Array();

for (var i = 0; i < 10; i++) {

arr[i] = function () {

return i;

}

}

return arr;

}

var funcs = createArray();

for (var i = 0; i < funcs.length; i++) {

document.write(funcs[i]() + "<br />");

}

//以上输出全部是i的最后一次的值(10),即会输出10个10,显然这不是我们想要的

//原因:因为每个函数都保存了createArray函数的活动对象,所以他们引用的都是同一个i(按引用传的值)

//解决方案:把按引用传参修改为按值传参

function createArray() {

var arr = new Array();

for (var i = 0; i < 10; i++) {

arr[i] = function (num) {

return function () {

return num;

}

} (i);//调用此匿名函数返回内部匿名函数,这里多了一步按值传递参数

}

return arr;

}

var funcs = createArray();

for (var i = 0; i < funcs.length; i++) {

alert(funcs[i]() + "<br />");

}

//以上输出的为理想结果

</script>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类