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
JQuery 引发两次$(document.ready)事件
Jan 15 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
Jan 21 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
react-native ListView下拉刷新上拉加载实现代码
Aug 03 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
Aug 26 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
vue中data里面的数据相互使用方式
Jun 05 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计算两个文件相对路径的方法
2015/03/14 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python selenium操作cookie的实现
2020/03/18 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python3注册全局热键的实现
2020/03/22 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
运动会报道稿300字
2014/10/02 职场文书
高三物理教学反思
2016/02/20 职场文书
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android