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

    推荐阅读