JS进阶——JS闭包

本文详细解释了JavaScript闭包的概念,涉及函数嵌套、变量引用的特性,通过实例展示了闭包如何保持对外部变量的访问,以及不同闭包写法的应用。
摘要由CSDN通过智能技术生成

JavaScript 闭包 (w3school.com.cn)

JavaScript中的闭包(Closure)是一个非常重要的概念,它涉及到函数作用域和变量引用的深入理解。

闭包的形成主要依赖于两个特性:函数嵌套和函数内部的变量引用。当一个内部函数引用了其外部函数的变量时,即使外部函数执行完毕,这个内部函数仍然可以访问到外部函数的变量。这是因为JavaScript的垃圾回收机制不会回收被引用的变量,所以即使外部函数执行完毕,其变量仍然存在于内存中,可以被内部函数访问。

下面是一个简单的闭包示例:

function outer() {
    let i=1
    function fn() {
        console.log(i)
    }
    return fn
}
const fun =outer()
fun() // 1
//外侧函数使用内部函数的变量
function outerFunction() {
    var counter = 0;
    function innerFunction(){
        return counter += 1;
    }
    return innerFunction;
    /*
     注意 typeof innerFunction 是:function;而typeof innerFunction()是number;
    */
}
var add = outerFunction();

/* 
调用 outerFunction()返回的是内部函数innerFucntion,那么调用几次add()将调用几次
内部函数inner Function,内部函数公用了counter,所以能够计数,所以说闭包就是将内部嵌套函数变成外部可调用的。
*/

add();
add();
add();

闭包可以有多种写法:

var add = (function(){
    var count = 0;//外部访问的计数器,局部变量.
    var fun = function(){
        return ++count;
    }
    return fun;
})();
    
//或者
var add2 = (function(){
    var count = 0;//外部访问的计数器,局部变量.
    function plus(){
        return ++count;
}
return plus;
})();
    
//或者
var add3 = (function(){
    var count = 0;//外部访问的计数器,局部变量.
    return function(){
        return ++count;
    }
})();
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值