最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JS闭包的特性分析

来源:动视网 责编:小采 时间:2020-11-27 20:01:54
文档

JS闭包的特性分析

JS闭包的特性分析:在body标签中,添加一个u标签,其id为node,ul标签下面有5个li标签。如何在点击不同的li 标签时,弹出其li下标? 1)首先需要获得ul节点 var node = document.getElementsById(node) 2) 获得node节点下子节点 var list = node.c
推荐度:
导读JS闭包的特性分析:在body标签中,添加一个u标签,其id为node,ul标签下面有5个li标签。如何在点击不同的li 标签时,弹出其li下标? 1)首先需要获得ul节点 var node = document.getElementsById(node) 2) 获得node节点下子节点 var list = node.c


在body标签中,添加一个u标签,其id为node,ul标签下面有5个li标签。如何在点击不同的li 标签时,弹出其li下标?
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闭包的特性分析:在body标签中,添加一个u标签,其id为node,ul标签下面有5个li标签。如何在点击不同的li 标签时,弹出其li下标? 1)首先需要获得ul节点 var node = document.getElementsById(node) 2) 获得node节点下子节点 var list = node.c
推荐度:
标签: js 分析 特性
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top