JavaScript的闭包

基本概念:闭包是函数的一种高级应用方式,通过建立一个不被销毁的存储空间,来在函数的外部调用和使用函数内部的数据,使用内部函数的数据
定义闭包:
1、定义一个函数a,返回值是一个函数b,
2、在返回值函数b中,使用函数a定义的局部作用域变量
3、在函数a的外部,引用函数a,并且执行返回值函数b
闭包的特点:
1、函数作用域空间不会被销毁
优点:空间中的内容永远存在
缺点:占用大量的内存空间
2、可以从外部访问函数的内部变量
优点:使用变量数据方便
缺点:容易泄露数据信息
3、保护私有作用域变量
优点:确保私有作用域变量一直存在
缺点:占用内存空间
闭包的最大问题是:有可能造成占用大量的内存空间,降低程序的执行效率,甚至有可能造成数据溢出或者是数据泄露,因为为了保护数据的安全性,特殊情况下,才会使用闭包
下面列举闭包的例子
1、闭包案例
function add(){
var count=0;
function fun(){
return ++count;
}
return fun;
}
//将f1全局变量与fun进行绑定
var f1=add();
console.log(f1());
console.log(f1());
console.log(f1());
2、闭包案例
function add(){
var count=0;
return function(){
return ++count;
}
}
var f1=add();
console.log(f1());
console.log(f1());
console.log(f1());
3、闭包和自运行结合使用
var f2=(function(){
var count=0;
return function(){
return ++count;
}
}());
console.log(f2());
console.log(f2());
console.log(f2());
二、闭包应用

  • 第一个
  • 第二个
  • 第三个
  • 第四个
  • 第五个
点击对应的li打印出对应的数字(1-5)

//1使用let的
let oLi=document.querySelectorAll(“li”);
for(let i=0;i<oLi.length;i++){
oLi[i].οnclick=function(){
console.log(i+1);
}
}
// 2使用forEach
let oLi=document.querySelectorAll(“li”);
oLi.forEach(function(item,index){
item.setAttribute(“i”,index+1);
item.οnclick=function(){
console.log(this.getAttribute(‘i’));
}
})
//for循环
let oLi=document.querySelectorAll(“li”);
for(var i=0;i<oLi.length;i++){
oLi[i].setAttribute(“index”,i+1)
oLi[i].οnclick=function(){
console.log(this.getAttribute(‘index’));
}
}

//闭包
let oLi=document.querySelectorAll(“li”);
for(var i=0;i<oLi.length;i++){
oLi[i].οnclick=(function(a){
return function(){
console.log(a+1);
}
})(i)
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值