首页 / JAVASCRIPT / JS闭包的特性分析
JS闭包的特性分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JS闭包的特性分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1828字,纯文字阅读大概需要3分钟。
内容图文
![JS闭包的特性分析](/upload/InfoBanner/zyjiaocheng/295/5ba6d5189aab4083b3299dab3fa670c1.jpg)
1)首先需要获得ul节点 var node = document.getElementsById(‘node’)
2) 获得node节点下子节点 var list = node.children
**3)给子节点循环添加onclick事件(此处注意,会存在闭包问题)。for(var i=0;i< list.length; i++){
list[i].onclick = function()console.log(i)}} ,从打印的结果发现,每次输出的都是7。**
4)分析输出7,由于i 采用var声明为全局变量,指向同一个地址。循环执行后,i的值为7,因此每次循环打印的结果均为7
采用两种方式解决,1)声明块级作用域变量,每次传进来i,都用let j = i, 接收。
let j = i; list[i].onclick = function(){console.log(j)}
在function方法,调用了块级变量j,该变量并不会被垃圾回收。每次for循环均指向不同的地址,因此触发点击事件时,可以正确打印其下标 2)采用闭包来解决。
list[i].onclick = function(i){ return function(){console.log(i)}。 }
**解读闭包
闭包就是能够读取其他函数内部变量的函数。在JavaScript语言中,只有函数内部的子函数才能读取局部变量。可以简单将闭包理解为“定义在一个函数内部的函数”。本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
注意:使用闭包会使得函数中的变量被保存在内存中,内存消耗较大,因此不能滥用闭包,将会造成网页的性能问题,在IE浏览器中可能导致内存泄漏。。结局办法,在退出函数之前,将不使用的局部变量全部删除。
借助别人的例子。供大家参考
var name = "this window"; var object = { name :"my object", getNameFunc:function () { return function () { return this.name; } } } alert(object.getNameFunc()());/弹出this window2 。此时this对象指向window对象 var object2 = { name: "my object", getNameFunc2: function () { var that = th is; return function () { return that.name; } } } alert(‘that’+object2.getNameFunc2()()); ///弹出my object。此时this对象指向object2对象
相关推荐:
简单理解JS闭包
JS闭包常见形式详解
JS闭包用法的示例代码分享
以上就是JS闭包的特性分析的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的JS闭包的特性分析全部内容,希望文章能够帮你解决JS闭包的特性分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。