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 相关文章推荐
javascript基础的动画教程,直观易懂
Jan 10 Javascript
一个js写的日历(代码部分网摘)
Sep 20 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
理解Koa2中的async&amp;await的用法
Feb 05 Javascript
Vuex入门到上手教程
Jun 20 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 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 STRING 陷阱原理说明
2010/07/24 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Python制作词云图代码实例
2019/09/09 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
教育实习生的自我评价分享
2013/11/21 职场文书
考博专家推荐信模板
2013/12/02 职场文书
个人委托书格式
2014/04/04 职场文书
校园文明倡议书
2014/05/16 职场文书
村委会贫困证明范文
2014/09/21 职场文书
整改报告怎么写
2014/11/06 职场文书
毕业生党员个人总结
2015/02/14 职场文书
个人求职信格式范文
2015/03/20 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书