对js闭包的理解

在W3C和网上其他地方看了一下闭包,记录一下个人理解。

个人认为,闭包就是一个函数内包含另一个函数 ,然后函数外可以调用另一个函数内的变量或函数返回值。

看到这,大家都会觉得。还要你说,傻子都知道。

但是,事实就是如此,来段代码


var iBaseNum = 10;
function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  function doReduce(){
    return iBaseNum - (iNum1 + iNum2);
  }
  return doAdd() - doReduce();
}
console.log(addNum(1,1));//4

我就是从这个很简单的闭包开始理解的,定义一个全局变量,再定义一个父函数里面包含两个子函数。

按我刚才的认为,这就是一个函数包含另一个函数,哦不,包含两个函数。这就是闭包。大家可以去运行一下,具体感受一下。
 

----------------------------------------------2022-10-13分割线------------------------------------------------

五年过去了,回看自己的代码,总是觉得不忍直视,但那也是曾经啊,所以我不打算删掉上面的代码,重新写一下对闭包的理解

进入正题

闭包是什么?

闭包是外部函数嵌入一个内部函数,然后内部函数调用外部函数的变量的函数。

有点绕口,用代码看下就能清晰点

function wrap(age) {
    let name = '小明'
    function inside(){
    	console.log(`${name}已经 ${age} 了`)
    }
    return {inside}
}
let wrapTemp = wrap(18)
wrapTemp.inside() // 小明今年 18 了

上面这个函数 wrap就是外部函数,

然后他内嵌了一个inside函数,

而inside函数又调用了wrap这个外部函数的变量name和参数age

而这就形成了闭包

拓展一下知识

其实我们用对象也能实现类似的功能

let wrap = {
    name: '小明',
    age: 18,
    inside() {
        console.log(`${this.name}已经 ${this.age} 了`)    
    }
}
wrap.inside() // 小明已经 18 了

当然,只当衍生知识了,具体细究就不再列举了,留给大家自己去继续探究了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值