分享一道关于闭包、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 相关文章推荐
点图片上一页下一页翻页效果
Jul 09 Javascript
JS 分号引起的一段调试问题
Jun 18 Javascript
jquery入门—选择器实现隔行变色实例代码
Jan 04 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
原生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环境――Appserv
2006/12/13 PHP
Views rows style模板重写代码
2011/05/16 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
JS实现购物车特效
2017/02/02 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
python中Genarator函数用法分析
2015/04/08 Python
Python httplib模块使用实例
2015/04/11 Python
详解django自定义中间件处理
2018/11/21 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python爬虫基础知识点整理
2020/06/02 Python
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
什么是类的返射机制
2016/02/06 面试题
幼儿园保教管理制度
2014/02/03 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书