JavaScript中let避免闭包造成问题
程序员文章站
2022-04-26 14:25:58
关于 let 避免闭包带来的问题利用面向对象思想完成买家信息删除功能,每一条信息包含: 姓名 电话 电话号码 省份 实现以下要求: 不能借用任何第三方库,需要使用原生代码实现。 结合给出的基本代码结构...
关于 let 避免闭包带来的问题
利用面向对象思想完成买家信息删除功能,每一条信息包含:
姓名
电话
电话号码
省份
实现以下要求:
不能借用任何第三方库,需要使用原生代码实现。
结合给出的基本代码结构,在下方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... 一些好的习惯要养成。
到此这篇关于javascript中let避免闭包造成问题的文章就介绍到这了,更多相关javascript中let闭包问题内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Nginx实现前后端分离
下一篇: 详解Nginx 利用代理转发请求示例
推荐阅读
-
浅谈JavaScript中的作用域和闭包问题
-
JavaScript中let避免闭包造成问题
-
面试题之JavaScript中的闭包概念及应用(顺便普及一下内存泄漏问题)
-
浅谈JavaScript中的作用域和闭包问题
-
JavaScript中let避免闭包造成问题
-
浅谈JavaScript中的作用域和闭包问题_基础知识
-
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题_javascript技巧
-
javascript中运用闭包和自执行函数解决大量的全局变量问题_javascript技巧
-
浅谈JavaScript中的作用域和闭包问题_基础知识
-
javascript中运用闭包和自执行函数解决大量的全局变量问题_javascript技巧