分享一道关于闭包、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 篱式条件判断
Aug 22 Javascript
60行js代码实现俄罗斯方块
Mar 31 Javascript
js获取页面description的方法
May 21 Javascript
JavaScript实现点击按钮切换网页背景色的方法
Oct 17 Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
Nov 02 Javascript
Angular.js中上传指令ng-upload的基本使用教程
Jul 30 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
addEventListener()和removeEventListener()追加事件和删除追加事件
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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
javascript 学习笔记(onchange等)
2010/11/14 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
js选择器全面解析
2016/06/27 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
python中的错误处理
2016/04/10 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
个人思想理论学习的自我鉴定
2013/11/30 职场文书
环保公益策划方案
2014/08/15 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS