分享一道关于闭包、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 相关文章推荐
用jQuery简化JavaScript开发分析
Feb 19 Javascript
页面版文本框智能提示JS代码
Nov 20 Javascript
关于Aptana Studio生成自动备份文件的解决办法
Dec 23 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 Javascript
js获取图片宽高的方法
Nov 25 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
Dec 08 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
Dec 23 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
Sep 23 Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 Javascript
vue瀑布流组件实现上拉加载更多
Mar 10 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
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php导出CSV抽象类实例
2014/09/24 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
情人节之礼 js项链效果
2012/02/13 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
JavaScript函数详解
2015/02/27 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
图解Python变量与赋值
2018/04/03 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python如何将字符串转换为日期
2020/07/31 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
家长学校工作方案
2014/05/07 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
师德师风自查材料
2014/10/14 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
鸦片战争观后感
2015/06/09 职场文书