闭包
变量作用域
根据作用域不同分为:全局变量和局部变量
1.函数内部可以使用全局变量
2.函数外部不可以使用局部变量
3.当函数执行完毕,本作用域内的局部变量会销毁
什么是闭包
闭包指有权访问另一个函数作用域中变量的函数。--JavaScript高级程序设计
可以理解为:一个作用域可以访问另外一个函数内部的局部变量。
function fn(){
var num = 10;
function fun(){
console.log(num )
}
fun();
}
fn();//fn 为闭包函数
闭包的作用
fn外面的作用域可以访问fn内部的局部变量
function fn(){
var num = 10;
return function (){
console.log(num )
}
}
var f = fn();
f();
闭包的作用是延伸了变量的作用范围
例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<ul class="nav">
<li>苹果</li>
<li>梨</li>
<li>香蕉</li>
<li>西瓜</li>
</ul>
<script>
//获取li标签的索引号
//1.动态添加属性
var lis = document.querySelector('.nav').querySelectorAll('li');
for(var i =0; i<lis.length;i++){
lis[i].index = i;
lis[i].onclick = function(){
console.log(this.index);
}
}
//2.利用闭包的方式
for(var i =0; i<lis.length;i++){
(function(i){
lis[i].onclick = function(){
console.log(i);
}
})(i);
}
</script>
</body>
</html>
闭包的缺点是会占用内存,造成内存泄漏。