閉包
變量作用域
根據(jù)作用域不同分為:全局變量和局部變量
1.函數(shù)內(nèi)部可以使用全局變量
2.函數(shù)外部不可以使用局部變量
3.當函數(shù)執(zhí)行完畢,本作用域內(nèi)的局部變量會銷毀
什么是閉包
閉包指有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù)。--JavaScript高級程序設(shè)計
可以理解為:一個作用域可以訪問另外一個函數(shù)內(nèi)部的局部變量。
function fn(){
var num = 10;
function fun(){
console.log(num )
}
fun();
}
fn();//fn 為閉包函數(shù)
閉包的作用
fn外面的作用域可以訪問fn內(nèi)部的局部變量
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.動態(tài)添加屬性
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>
閉包的缺點是會占用內(nèi)存,造成內(nèi)存泄漏。