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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
纯JS焦点图特效实例(可一个页面多用)
Dec 07 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
深入浅析ES6 Class 中的 super 关键字
Oct 20 Javascript
vue路由组件按需加载的几种方法小结
Jul 12 Javascript
在create-react-app中使用css modules的示例代码
Jul 31 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 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/09/23 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP实现的简单缓存类
2015/07/29 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
基于Python的OCR实现示例
2020/04/03 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
合作合同协议书范本
2015/01/27 职场文书
社区义诊通知
2015/04/24 职场文书
观看《信仰》心得体会
2016/01/15 职场文书