分享一道关于闭包、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 相关文章推荐
让IE8支持DOM 2(不用框架!)
Dec 31 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
Jun 23 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
jQuery中remove()方法用法实例
Dec 25 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
微信小程序radio组件使用详解
Jan 31 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
Feb 28 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 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
德生PL330的评价与改造
2021/03/02 无线电
php提示undefined index的几种解决方法
2012/05/21 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python求质数的3种方法
2018/09/28 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
家长对老师的感言
2014/03/11 职场文书
委托书样本
2014/04/02 职场文书
租房协议书
2014/04/10 职场文书
请假条范文大全
2014/04/10 职场文书
审美与表现自我评价
2015/03/09 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
git stash(储藏)的用法总结
2022/06/25 Servers