分享一道关于闭包、bind和this的面试题


Posted in Javascript onFebruary 20, 2017

要解决的问题是针对下面这个ul,为每一个li添加一个点击事件,弹出对应的index

<ul id="text">
 <li>这是第一个li</li>
 <li>这是第二个li</li>
 <li>这是第三个li</li>
</ul>

解答一:bind,将当前匿名函数指向this,将i当参数传入

var init = function(){
var obj = document.getElementById('text');
for(var i=0;i<obj.children.length;i++){
 obj.children[i].addEventListener('click',function(i){
 alert(i)
 }.bind(this,i))
}
}
init();

解答二:闭包

var init = function(){
var lis=document.querySelectorAll("#text li");
 for(var i=0;i<lis.length;i++){
 lis[i].onclick=(function(i){
  return function(){
   alert(i);
  };
 })(i)
 }
}
init();

解答三:最笨的方法,匹配

var init = function(){
 var obj = document.getElementById('text');
 for(var i=0;i<obj.children.length;i++){
 obj.children[i].addEventListener('click',function(item){
 var self = item.target;
 for(var j=0;j<obj.children.length;j++){
 if(self == obj.children[j]){
  alert(j);
 }
 }
 })
 }
}
init();

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 Javascript
JS中微信小程序自定义底部弹出框
Dec 22 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
Node.js Express安装与使用教程
May 11 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 Javascript
原生js生成图片验证码
Oct 11 Javascript
原生JS实现跑马灯效果
Feb 20 #Javascript
js 实现省市区三级联动菜单效果
Feb 20 #Javascript
js事件冒泡与事件捕获详解
Feb 20 #Javascript
关于ES6的六个小特性(二)
Feb 20 #Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 #Javascript
JS批量替换内容中关键词为超链接
Feb 20 #Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 #Javascript
You might like
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP7 标准库修改
2021/03/09 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
详解JS函数防抖
2020/06/05 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python实现拼接图片
2020/03/23 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
优秀广告词大全
2014/03/19 职场文书
安全宣传标语口号
2014/06/06 职场文书
体育节口号
2014/06/19 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
企业法律事务工作总结
2015/08/11 职场文书
诚信考试主题班会
2015/08/17 职场文书
Django实现翻页的示例代码
2021/05/24 Python