js中闭包函数的调用方法

function fn() {
      let num = 10 // 只能在函数里面使用,外面看不到---- 数据私有化
      console.log('外');
      return function g() {
        num++
        console.log(num);
      }
    }
    const res = fn()
    fn()//外
    res//外

    res()//11
    res()//12
    fn()()//11 外
    fn()()//11 外

闭包的作用: 可以让函数外面访问函数内部的变量

现有需求,通过外部访问闭包内层函数,让num每次访问后加一

方法:

1.声明一个变量res = fn(),此时res就为一个函数(可以理解闭包的外层函数)

2.访问内部函数g().我们直接可以使用 res + ()的写法 即 res()来直接访问内层函数g()(调用内层函数g())

原理:

这里的res()的写法,是表示通过给res赋值为fn()这个函数,让res可以直接看成是这个闭包函数的外层函数,想要每次直接访问内层函数,只需要给外层函数加括号,就能直接访问内层函数.

不同的思路:

首先声明这个思路并不能满足上面的需求.但是很接近,容易混淆

提问:我们既然把fn()的值 赋给了res,(res=fn())那是不是代表 res下面的用法可以完全被fn()代替呢?即下面的res()可以用 fn()()代替呢?

回答:不可以!

原因:两者表示的含义完全不同.

fn()()表示 每一次都会先调用外层函数fn()再调用内层函数g(),不管下面写多少次fn()(),num的值每次都会先调用一次外层函数fn()被重新赋值为10,再调用g() 为11,永远只能打印 '外' 和 11 

res()这个代码表示它通过fn()这个外层函数,直接调用一次内层函数g(),跳过了每次都会重新调用外层函数fn(),再找内层函数g()的这个过程,所以不管res()写多少次,外层函数中的let num = 10只会声明一次,g()里面num的值会随着res()的使用次数不断累加

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值