分享一道关于闭包、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 相关文章推荐
javascript 写类方式之五
Jul 05 Javascript
JQuery 实现的页面滚动时浮动窗口控件
Jul 10 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
Jan 22 Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 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 Document 代码注释规范
2009/04/13 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
深入理解React高阶组件
2017/09/28 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
python模块之StringIO使用示例
2015/04/08 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Python wordcloud库安装方法总结
2020/12/31 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
培训研修方案
2014/06/06 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
三方协议书
2015/01/27 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
心理健康教育主题班会
2015/08/13 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android