什么是闭包
闭包指有权访问另一个函数作用域中的变量的函数。 —Javascript高级程序设计
在这句话中,要抓住重点:闭包就是函数
简单理解就是:一个作用域可以访问另一个函数内部的局部变量
被访问的这个局部变量所在的函数,就是闭包函数
function fn() {
var num = 10;
function fun() {
console.log(num);
}
fun();
}
fn();
这个断点可以很明白的看出,fn()为闭包函数
代码分析:
num属于fn()函数里面的局部变量,但是fun()可以访问到num这个局部变量,所以这段代码存在闭包现象,并且fn()为闭包函数
闭包的作用
闭包的主要作用:延伸了变量的作用范围
局部变量只有在局部作用域中才可以使用,当这个代码块运行结束后,就会被销毁。闭包的作用就是让局部变量在局部作用域外也可以使用
代码讲解:
//我们fn 外面的作用域可以访问fn内部的局部变量
function fn() {
var num = 10;
function fun() {
console.log(num);
}
return fun;//返回一个函数
}
var f = fn(); //用f来接收这个函数 里面存的是fun函数
f(); //调用fun函数
//类似于
/* var f = function fun() {
console.log(num);
} */
这段代码实现了在fn外面的作用域,函数f访问了num变量
闭包应用(含经典面试题)
案例一:点击li输出索引号
方法一:利用动态添加属性的方式
<ul class="nav">
<li>苹果</li>
<li>火龙果</li>
<li>葡萄</li>
<li>樱桃</li>
</ul>
<script>
var lis = document.querySelector(