閉包的問題一直沒搞太清楚,努力搞明白中……前置知識:作用域和作用域鏈。
概述:
閉包:是指有權訪問另一個函數作用域中的變量的函數。
創建閉包的常見方式就是在一個函數的內部創建另一個函數。在另一個函數中,內部定義的函數會將包含函數(即外部函數)的活動對象添加到它的作用域中。
function ceatComparisionFunction(propertyName){
return function(obj1,obj2){
var val1=obj1[properyName];
var val2=obj2[properyName];
if(val1<val2){
return -1;
}else if(val1>val2){
reutrn 1;
}else{
return 0;
}
};
}
加粗的兩行代碼是內部函數中的代碼,訪問了外部函數中的變量propertyName,內部函數能夠訪問外部函數的原因是內部函數的作用域鏈中包含了趁熱愛他Com怕日死onFunction()的作用域。
應用閉包的兩種情況:
(1)函數作爲返回值;
(2)函數作爲參數傳遞。
這篇博文寫的挺詳細的:https://blog.csdn.net/yummy_go/article/details/50663081