JavaScript中for循环总是输出最大值问题的几种解决方式
来源:互联网 发布:linux hexdump函数 编辑:程序博客网 时间:2024/05/21 00:51
假设我们做一个选项卡,可以通过点击每个li来进行切换,但这个时候使用for循环来获取对应的每个li值时,发现了一个问题,就是无论你点击哪一个li,它总是输出最后的一个值,而解决这个问题的方法,有下面的几种:
这里是html的部分代码,我用三个li来演示:
<ul id="box"> <li>1</li> <li>2</li> <li>3</li></ul><script> window.onload = function(){ var oul = document.getElementById('box'); var oli = oul.getElementsByTagName('li'); //下面的js代码都将是写在这行注释的后面 ......</script>
下面是javascript的实现代码:
//方法1:加一层闭包,i以函数参数形式传递给内层函数for(var i=0;i<oli.length;i++){ (function(j){ oli[i].onclick = function(){ console.log(j); } })(i);//调用时的参数}
//方法2:加一层闭包,i以局部变量形式传递给内层函数for(var i=0;i<oli.length;i++){ (function(){ var tmp = i;//调用时的局部变量 oli[i].onclick = function(){ console.log(tmp); } })();}
//方法3:加一层闭包,返回一个函数作为响应事件for(var i=0;i<oli.length;i++){ oli[i].onclick = function(arg){ return function(){//返回一个函数 console.log(arg); } }(i);}
//方法4:将变量 i 保存给在每个li对象上for(var i=0;i<oli.length;i++){ oli[i].index = i;//index可以取自定义的名称 oli[i].onclick = function(){ console.log(this.index); } }
//方法5:将变量 i 保存在匿名函数自身for(var i=0;i<oli.length;i++){ (oli[i].onclick = function(){ console.log(arguments.callee.index); }).index = i;//index可以取自定义的名称}
callee返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。callee属性是 arguments 对象的一个成员,它表示对函数对象本身的引用。
//方法6:用Function实现,实际上每产生一个函数实例就会产生一个闭包for(var i=0;i<oli.length;i++){ oli[i].onclick = new Function("console.log("+i+");");}//Function("console.log("+i+");")等价于//function anonymous() {//console.log(i);//}
ECMAScript用 Function 类直接创建函数的语法:
var function_name = new Function(arg1, arg2, ..., argN, function_body);
在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。当你通过这种方式去构造一个函数时,通过输出function_name,可以看到整个函数的真正实体。如下:
//这里把上面的函数修改了一下,只写了两个参数,把function_body换成//console.log(arg1+arg2),当把这个函数输出时,可以看到下面的代码function anonymous(arg1,arg2/*``*/) {console.log(arg1+arg2);}
//方法7:用Function实现,与6有一点区别for(var i=0;i<oli.length;i++){ oli[i].onclick = Function("console.log("+i+");");}
阅读全文
0 0
- JavaScript中for循环总是输出最大值问题的几种解决方式
- javascript解决for循环中i取值的问题
- javascript中for循环的几种写法与总结
- javascript中常用的几种输出方式
- java for的几种循环方式
- Vue指令v-for之遍历输出JavaScript数组,json对象的几种方式
- for循环倒序输出字符串的几种方法
- Android中循环的几种方式
- 解决javascript for 循环使用闭包的问题
- JS中for循环输出同一变量值的问题
- List元素的几种for循环方式及其点评
- List元素的几种for循环方式及其点评
- swift中解决闭包循环引用的几种方式
- Swift中解决闭包循环引用的几种方式
- JavaScript for循环中发送AJAX请求的问题
- javascript学习中遇到的for循环次数问题。
- JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
- for in 循环的输出顺序问题
- Git使用学习笔记
- scala(4)-----变量
- Linear Regression WEEK2编程作业
- [LOJ#2289 && BZOJ5020][THUWC 2017]在美妙的数学王国中畅游
- Node 搭建简易 HTTP 静态资源服务器
- JavaScript中for循环总是输出最大值问题的几种解决方式
- 实现多层感知机
- Docker容器的网络基础-自定义虚拟网桥
- ES6中module加载时有无default的区别
- 葵花宝典 七 面向对象
- hdu—1008
- struts-拦截器
- 微信小程序初步认识
- 水印图片