1、关于函数部分有用拓展
引用类型>Function类型>作为值的函数
小例子之使数组按指定属性排序
//声明函数
function createComparisonFunction(propertyName){
return function(object1,object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
} else {
return 0;
}
};
}
var data = [{name:"Zachary",age:28},{name:"Nicholas",age:29}];
//按姓名排序
data.sort(createComparisonFunction("name"));
//data的值
0: {name: "Zachary", age: 28}
1: {name: "Nicholas", age: 29}
通过callee属性,升级递归算法
callee属性:是一个指针,指向拥有这个arguments对象的函数。
function factorial(num){
if (num <=1){
return 1;
}else{
return num * factorial(num-1);
}
}
消除函数的执行与函数名factory的耦合
function factorial(num){
if(num<=-1){
return 1;
} else {
return num * arguments.calle(num-1)
}
}
重写了factory函数,无论引用函数时用的是什么名字,都可以保证正常的完成递归。
var tureFactorial = factorail;
factorial = function (){
return 0;
}
alert(trueFactorial(5)); //120
alert(factorial(5)); //0
扩充函数的作用域
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue