JS中怎么利用let避免闭包带来的问题
Admin 2022-06-15 群英技术资讯 327 次浏览
利用面向对象思想完成买家信息删除功能,每一条信息包含:
姓名
电话
电话号码
省份
实现以下要求:
不能借用任何第三方库,需要使用原生代码实现。
结合给出的基本代码结构,在下方2处code here补充代码,完成买家信息的删除功能,注意此页面要在手机上清晰显示。
js代码可以任意调整,例如和使用es6代码完成。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!--code here--> <title>demo</title> <style> * { padding: 0; margin: 0; } .head, li div { display: inline-block; width: 70px; text-align: center; } li .id, li .sex, .id, .sex { width: 15px; } li .name, .name { width: 40px; } li .tel, .tel { width: 90px; } li .del, .del { width: 15px; } ul { list-style: none; } .user-delete { cursor: pointer; } </style> </head> <body> <div id="J_container"> <div class="record-head"> <div class="head id">序号</div> <div class="head name">姓名</div> <div class="head sex">性别</div> <div class="head tel">电话号码</div> <div class="head province">省份</div> <div class="head">操作</div> </div> <ul id="J_List"> <li> <div class="id">1</div> <div class="name">张三</div> <div class="sex">男</div> <div class="tel">13788888888</div> <div class="province">浙江</div> <div class="user-delete">删除</div> </li> <li> <div class="id">2</div> <div class="name">李四</div> <div class="sex">女</div> <div class="tel">13788887777</div> <div class="province">四川</div> <div class="user-delete">删除</div> </li> <li> <div class="id">3</div> <div class="name">王二</div> <div class="sex">男</div> <div class="tel">13788889999</div> <div class="province">广东</div> <div class="user-delete">删除</div> </li> </ul> </div> <script> // 此处也可换成ES6的写法 function Contact() { this.init(); } // your code here </script> </body> </html>
code1
<meta name="viewport" content="width = device-width,initial-scale=1">
code2 ( 别人的代码 )
Contact.prototype.init = function () { console.log("Test"); var div = document.getElementsByClassName("user-delete"); var ul = document.querySelector("#J_List"); var list = ul.querySelectorAll("li"); for (var i = 0; i < div.length; i++) { (function (i) { div[i].onclick = function () { list[i].remove(); console.log(i); } })(i); } } new Contact();
其中
(function (i) { div[i].onclick = function () { list[i].remove(); console.log(i); } })(i);
这段立即执行函数没看懂意义
我的代码
Contact.prototype.init = function () { let div = document.getElementsByClassName("user-delete"); let ul = document.querySelector("#J_List"); let list = ul.querySelectorAll("li"); for (let i in div) { div[i].onclick = function () { list[i].remove(); console.log(i); } } } new Contact();
后来想起来是为了避免闭包带来的问题,这一段廖雪峰老师讲过,但是一时没有想起来,详见 廖雪峰闭包
但是我的代码运行起来也是没有任何问题的,因为当时没有块级作用域的说法,但是现在可以用 let 来避免这个问题。所以如果 i 是用 let 来声明的话就可以不用立即执行函数。并且写代码应当避免用 var,改用 let。还有一个,避免使用 for(let i =0;condition;++i) 这种语句,尽量使用 for...in... 一些好的习惯要养成。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了Promise静态四兄弟实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
Vue3 在经过多个开发版本的迭代后,终于迎来了它的正式版本,下面这篇文章主要给大家介绍了关于如何使用vue3实现一个人喵交流小程序的相关资料,需要的朋友可以参考下
node的全局对象是“global”,global最根本的作用是作为全局变量的宿主;而所有全局变量(除了global本身以外)都是global对象的属性。在Node.js中可以直接访问到global的属性,而不需要在应用中包含它。
这篇文章给大家分享的是JS中getday方法的相关内容。在javascript中,escape()方法能用于指定日期是星期几,小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起学习一下吧。
这篇文章主要介绍typescript中的类型保护,很多新手可能对类型保护不是很了解,下文有具体的介绍和实例,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008