JavaScript 闭包的简单理解与示例

闭包简单理解: 需要重复循环使用一些变量但该变量又不想让其他方式污染(私有变量)

闭包复杂理解:

1. 首先我们需要理解每次函数创建时都会创建临时内存,在函数调用结束就会被释放

2. 我们闭包即为在一个函数中返回值为内部函数,在调用完毕以后会清空内部函数自身的临时内存 但 不会清空包裹他的父级函数的内存,这时即可对父级函数的局部变量重复操作使用.

(因内部函数引用并保护了外层函数的作用域对象导致外层函数的作用域无法释放所以形成了闭包)

3. 只能重复使用父级函数的局部变量, 内部函数所声明的局部变量仍然会在每次调用完毕后被销毁

 闭包的声明: 声明一个函数包裹变量并return返回一个内部函数 或 返回对象中包含多个函数方法

闭包的调用:  声明一个变量初始化赋值函数后即可反复调用(多次声明不相互影响) 

返回一个内部函数方法示例: 

// 声明闭包 Cat
function Cat(){
    var age = 0
    return function(){
        return ++age;
    }
}
// 声明两个变量保存闭包Cat
var oneCat = Cat();
var twoCat = Cat();
// 重复多次调用并打印数据
console.log(oneCat())   //打印结果: 1
console.log(oneCat())   //打印结果: 2
console.log(twoCat())   //打印结果: 1
console.log(twoCat())   //打印结果: 2
        
// 以上结果体现了声明以后两个变量内的数据互不干扰

返回对象中包含多个函数方法示例:

// 声明闭包 Cat
function Cat(){
    var name,age;
    // 使用对象返回多个函数方法
    return {
       log:function(){ console.log(age,name); },
       setName(value){ name = value; },
       setAge(value){ age = value; }
    }
}
        
// 同时声明两个变量来保存闭包结果
var blackCat = Cat();
var redCat = Cat();
// 同时给两个变量赋值不同数值
redCat.setName('小红');
redCat.setAge(11);
blackCat.setName('小黑');
blackCat.setAge(16);
// 同时打印数据
redCat.log();
blackCat.log();
        
// 数据结果应为(结果体现了声明以后两个变量内的数据互不干扰)
// redCat打印:  11 小红
// blackCat打印:  16 小黑

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊悚的毛毛虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值