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 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
javascript打开新窗口同时关闭旧窗口
Jan 16 Javascript
Jquery提交表单 Form.js官方插件介绍
Mar 01 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
JS简单计算器实例
Jan 20 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
vue.js+Element实现表格里的增删改查
Jan 18 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
vue实现拖拽交换位置
Apr 07 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
php 传值赋值与引用赋值的区别
2010/12/29 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
JS原生数据双向绑定实现代码
2017/08/14 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
flask项目集成swagger的方法
2020/12/09 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
联想台湾官网:Lenovo TW
2018/05/09 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
工程售后服务承诺书
2014/05/21 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python