网络编程 
首页 > 网络编程 > 浏览文章

JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题

(编辑:jimmy 日期: 2026/5/7 浏览:3 次 )
复制代码 代码如下:
<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:google 向上向下滚动特效,兼容IE6,7,8,FF
下一篇:JavaScript 通过模式匹配实现重载
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 站点导航 SiteMap