1、函数的使用
- 函数中的几个属性
function f1(x, y){
console.log(f1.name);// 函数的名字
console.log(f1.length);// 函数定义中的参数个数
console.log(f1.arguments.length);// 实参的个数
console.log(f1.caller);// 函数的调用者
}
- 函数作为参数使用
function sortFn(ele1, ele2){
if (ele1 > ele2){
return 1;
}
if (ele1 == ele2){
return 0;
}
return -1;
}
var arr = [10, 30, 65, 35, 66, 90, 86];
arr.sort(sortFn);
console.log(arr);
- 函数作为返回值使用
// 判断给定的对象是不是某个指定的类型
function judgeType(type){
// 函数作为返回值
return function (obj){
return Object.prototype.toString.call(obj) == type;
}
}
var ff = judgeType("[object Array]");
var result = ff([10, 20, 30]);
console.log(result);
例:文件排序
function File(name, size, time){
this.name = name;
this.size = size;
this.time = time;
}
var file1 = new File("Jack.avi", "200M", "2007-08-31");
var file2 = new File("Tom.avi", "300M", "2000-08-31");
var file3 = new File("XiaoMing.avi", "100M", "2017-08-31");
var fileArr = [file1, file2, file3];
/**
* 按照指定的属性对文件进行排序
* @param attr 属性
* @returns {(function(*, *): (number))|*}
*/
function sortFile(attr){
return function getSort(obj1, obj2){
if (obj1[attr] > obj2[attr]){
return 1;
} else if (obj1[attr] == obj2[attr]){
return 0;
} else {
return -1;
}
}
}
//var mySort = sortFile("time");
var mySort = sortFile("name");
//var mySort = sortFile("size");
fileArr.sort(mySort);
console.log(fileArr);
2、函数闭包
在函数A中存在一个函数B,函数B可以访问函数A中的变量,此时就形成了一个闭包。
- 闭包的模式
函数式的闭包、对象式的闭包。 - 闭包的作用
延长作用域链,缓存数据
可以在函数外部读取函数内部成员
让函数内成员始终存活在内存中
2.1 函数式闭包
// 函数式的闭包
function f1(){
var num = 10;
function f2(){
console.log(num);
}
f2();
}
f1();
2.2 对象模式的闭包
// 对象模式的闭包
function f3(){
var num = 20;
var obj = {
count: num
};
console.log(obj.count);
}
f3();