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


Posted in Javascript onAugust 12, 2010
<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 相关文章推荐
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
jQuery监控文本框事件并作相应处理的方法
Apr 16 Javascript
js由下向上不断上升冒气泡效果实例
May 07 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
Vue.JS入门教程之自定义指令
Dec 08 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 Javascript
Webpack打包字体font-awesome的方法示例
Apr 26 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
JavaScript 通过模式匹配实现重载
Aug 12 #Javascript
js更优雅的兼容
Aug 12 #Javascript
页面只有一个text的时候,回车自动submit的解决方法
Aug 12 #Javascript
javascript闭包的理解和实例
Aug 12 #Javascript
javascript 词法作用域和闭包分析说明
Aug 12 #Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 #Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
Aug 11 #Javascript
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
python计算auc指标实例
2017/07/13 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python enumerate内置函数用法总结
2020/01/07 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
在keras中实现查看其训练loss值
2020/06/16 Python
Keras实现DenseNet结构操作
2020/07/06 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
美国羊皮公司:Overland
2018/01/15 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
管理专员自荐信
2014/01/26 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
英语教师岗位职责
2014/03/16 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
学习型党组织心得体会
2014/09/12 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
慰问信格式
2015/02/14 职场文书
党员进社区活动总结
2015/05/07 职场文书
python基础之爬虫入门
2021/05/10 Python
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android