分享一道关于闭包、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 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
javascript 伪数组实现方法
Oct 11 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
Feb 13 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
JavaScript Html实现移动端红包雨功能页面
Jan 10 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
drupal 代码实现URL重写
2011/05/04 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
使用jQuery实现购物车结算功能
2017/08/15 jQuery
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
大学生个人简历自我评价
2013/11/16 职场文书
学校食堂标语
2014/10/06 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书