目錄
1.什么是閉包?
1.2 閉包的記憶性:函式能夠記住定義時所處的環境
1.3 閉包現象:JS中每次創建函式時都會創建閉包
2.閉包的功能:記憶性、模擬私有變數
2.1 記憶性
2.2 模擬私有變數(安全化變數)
3.IIFE(Immediately Invoked Function Expression,立即呼叫函式運算式):JS特殊函式,一旦被定義,就立即被呼叫
3.1 IIFE作用1-為變數賦值
3.2 IIFE作用2-將全域變數變為區域變數
1.什么是閉包?
函式本身和該函式宣告時所處的環境狀態的組合,

1.2 閉包的記憶性:函式能夠記住定義時所處的環境


1.3 閉包現象:JS中每次創建函式時都會創建閉包

2.閉包的功能:記憶性、模擬私有變數
2.1 記憶性

舉例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function createCheckTemp(standardTemp){
function checkTemp(n){
if(n<=standardTemp){
alert('你的體溫正常');
}else{
alert('你的體溫偏高');
}
}
return checkTemp;
}
var checkTemp_A=createCheckTemp(37.1);
var checkTemp_B=createCheckTemp(37.3);
checkTemp_A(37.2);
checkTemp_A(37.0);
checkTemp_B(37.2);
checkTemp_B(37.0);
</script>
</body>
</html>
細節:
1:閉包的記憶性
2:函式return checkTemp,是一個函式名
3:定義var checkTemp_A和checkTemp_A來獲取函式名checkTemp,而不是直接呼叫
2.2 模擬私有變數(安全化變數)

閉包代碼舉例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 封裝一個函式,這個函式的功能就是私有化變數
function fun(){
// 定義一個區域變數a
var a=0;
return {
getA:function(){
return a;
},
add:function(){
a++;
},
pow:function(){
a*=2;
}
}
}
var obj=fun();
// 如果想在fun函式外面使用變數a,唯一的方法就是調動getA()方法
console.log(obj.getA());
// 想讓變數a進行+1操作
obj.add();
obj.add();
obj.add();
console.log(obj.getA());
obj.pow();
console.log(obj.getA());
</script>
</body>
</html>

其實可以理解,JavaScript不像C++、Java那樣能定義函式的型別,比如int sum()、int add()、int pow()等等,所以就需要利用閉包的特性:即在函式內閉包的記憶性來對函式內變數進行操作,然后回傳閉包函式的名稱來進行內部資料操作,
3.IIFE(Immediately Invoked Function Expression,立即呼叫函式運算式):JS特殊函式,一旦被定義,就立即被呼叫

3.1 IIFE作用1-為變數賦值
舉例:
前后兩圖對比一下,體現編程水平,,,簡化代碼,,美觀,,,


3.2 IIFE作用2-將全域變數變為區域變數

這種情況下,下面五個陳述句的結果都是5,因為在JS中是沒有塊作用域這個概念的(暫時這么理解),所以var i就成了全域變數,for回圈后i=5,所以五個陳述句的結果都是5,
那么加下來可以利用IIFE解決這個問題,其本質是利用了函式的閉包特性

將全域變數i傳入IIFE函式中,全域變數 就 變成了區域變數,再利用JS函式的閉包特性,即可以實作圖中arr[2]()的功能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/332114.html
標籤:其他
上一篇:【通俗易懂】Vue如何使用百度地圖,通過vue-baidu-map插件實作地圖功能【檔案使用介紹】
下一篇:所見即所得
