什么是闭包、闭包的作用

闭包

变量作用域

变量根据作用域的不同分为两种:全局变量和局部变量

  • 函数内部可以使用全局变量。
  • 函数外部不可以使用局部变量。
  • 当函数执行完毕,本作用域内的局部变量会销毁。

什么是闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。 ————《JavaScript高级程序设计》

简单理解:闭包是一个函数 (一个作用域可以访问另外一个函数内部的局部变量)

例子:一个简单的闭包

//fun这个函数作用域 访问了另外一个函数 fn 里面的局部变量 num
function fn() {
    var num = 10;

    function fun() {
         console.log(num);
    }
    fun();
}
fn();

闭包的作用

主要作用:延伸了变量的作用范围
函数外面的作用域也可以访问到函数内部的局部变量

例子:

//fn 外面的作用域可以访问fn 内部的局部变量
function fn() {
    var num = 10;

    function fun() {
        console.log(num);
    }
    return fun;//返回一个函数
}
var f = fn();
//调用f函数 即调用了fn内部的fun函数 fun函数访问了fn的局部变量
f();
//相当于 
// var f = function fun() {
//         console.log(num);
//     }
//     return fun;

闭包的应用

经典问题:利用闭包获得当前小li的索引号

var lis = document.querySelector('.nav').querySelectorAll('li');
for(var i = 0; i < lis.length; i++){
    //立即调用函数
    (function(i){
        lis[i].onclick = function(){
            console.log(i);
        }
    })(i);//传入i
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值