下面两个闭包函数吗

NEVER FORGET?
  • 5
新手上路,请多包涵

image.png

image.png
这是vue computed 传递参数网上都说是用的闭包 但是我看是没有引用外层的函数的变量啊
比较迷惑 到底用没用闭包
求大佬解答一下

回复
阅读 443
3 个回答
✓ 已被采纳

不是
MDN解释:一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。

你这两个函数内使用的变量都是自身的传参,并没有与周围状态的应用捆绑
例子1改成如下:

function get(){
    let c = 1;
    return function closure(a,b){
        return a + b + c;
    }
}

函数closure与周围状态c引用捆绑形成了闭包

不是
产生 闭包需要两个条件
1:函数作为返回值/函数作为参数传递(满足)
2:发生跨作用域取值(不满足)

菜喵
  • 3
新手上路,请多包涵
function setCount() {
    let count = 1;
    return function(){
        //在这个匿名函数引用了上一层作用域的counter,这样count和这个匿名函数形成了闭包
        count = count + 1;
        console.log(count);
    }
};
const fc = setCount();
//闭包会使引用的数据常驻内存,所以每执行就会拿到之前的值相加,这也会给应用带来负担,闭包使用比较多会造成内存泄漏,如下结果
fc();//2
fc();//3
你知道吗?

宣传栏