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 相关文章推荐
基于jQuery的ajax功能实现web service的json转化
Aug 29 Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
AngularJS 日期格式化详解
Dec 23 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
React中的render何时执行过程
Apr 13 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
深入了解js原型模式
May 30 Javascript
JS实现音量控制拖动
Jan 15 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
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操作Memcache实例介绍
2013/06/14 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
js 通用订单代码
2013/12/23 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
详解Python核心对象类型字符串
2018/02/11 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
商场活动策划方案
2014/01/24 职场文书
食品安全检查制度
2014/02/03 职场文书
庆国庆活动总结
2014/08/28 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2016情人节宣传语
2015/07/14 职场文书
python实现学员管理系统(面向对象版)
2022/06/05 Python
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers