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 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
Nov 23 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
微信小程序与php 实现微信支付的简单实例
Jun 23 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
微信小程序实现预览图片功能
Oct 22 Javascript
JS中的函数与对象的创建方式
May 12 Javascript
vue大型项目之分模块运行/打包的实现
Sep 21 Javascript
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
php中数组首字符过滤功能代码
2012/07/31 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js Function类型
2011/12/04 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Python库安装速度过慢解决方案
2020/07/14 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
岗位职责怎么写
2014/03/14 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
小学教育见习报告
2014/10/31 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
如何用python绘制雷达图
2021/04/24 Python
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis