分享一道关于闭包、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插件实现图片延迟加载技术详细说明
Mar 12 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
javascript实现查找数组中最大值方法汇总
Feb 13 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
php session处理的定制
2009/03/16 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
python实现多线程抓取知乎用户
2016/12/12 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
.NET remoting中对象激活的两种方式
2015/06/08 面试题
孝敬父母的演讲稿
2014/05/14 职场文书
公司募捐倡议书
2014/05/14 职场文书
建筑工地标语
2014/06/18 职场文书
群众路线表态发言材料
2014/10/17 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
办公室管理规章制度
2015/08/04 职场文书
2016十一国庆节感言
2015/12/09 职场文书