- 首页 > it技术 > >
2018-10-25|2018-10-25 Function类型(p110-p115)
1.函数声明语法:
例:function sum (num1,num2){
return num1 + num2;
}2.函数表达式定义:
var sum = function(num1,num2){
return num1 + num2;
}3.Function构造函数
var sum = new Function("num1","num2","return num1 + num2");
不推荐!!!5.5.1 没有重载,会被后面的同名函数覆盖5.5.2 函数声明与函数表达式
解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);
至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被执行。例:
alert(sum(10,10))
function sum (num1,num2){
return num1 + num2;
}解析器有函数声明提升的过程。5.5.3 作为值的函数
例:
function add10(num){
return num + 10;
}var result1 = callSonmeFunction(add10,10);
alert(result1);
//20要访问函数的指针而不执行函数的话,必须去掉函数名后面的那对圆括号。可以从一个函数中返回了一个函数
例:function createComparisonFunction(propertyName){
return function(object1,object2){
var value1 = object[propertyName];
var value2 = object[propertyName];
if(value1value2){
return 1;
}else{
return 0;
}
};
}var data = https://www.it610.com/article/[{name:"Zachary",age:28},{name:"Nicholas",age:29}];
data.sort(createComparisonFunction("name"));
alert(data[0].name);
//Nicholasdata.sort(createComparisonFunction("age"));
alert(data[0].name);
//Zachary5.5.4函数内部属性
在函数内部,有两个特殊的对象:arguments和this。
arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有
这个arguments对象的函数例:阶乘函数
function factorial(num){
if(num<=1){
return 1;
}else{
return num *factorial(num-1);
}
}
问题在于这个函数的执行与函数名factorial紧紧
耦合在了一起。为了消除耦合,可以使用arguments.callee.例:
function factorial(num){
if(num<=1){
return 1;
}else{
return num*argument.callee(num-1);
}
} 在这个重写后的factorial()函数的函数体内,
没有在引用函数名factorial。这样,无论引用函数时是用什么名字都可以保证完成递归调用.var trueFactorial = factorial;
factorial = function(num){
return 1;
};
alert(factorial(5));
//1
alert(trueFactorial(5));
//120
推荐阅读