javascript高级程序设计第五章总结5.3

1、Function类型三种定义方法,函数声明定义跟函数表达式定义法的区别在于,计算器会率先读取函数声明,使其在执行代码之前可用,函数表达式必须等到解析器执行到它所在的代码行,才会真正被解析。

//函数声明定义法
function sum(num1,num2)
{
  return num1+num2
}

//函数表达式定义法
var sum=function(num1,num2){
  return num1+num2
}

//Function 构造函数
var sum=new Function("num1","num2","retrun num1+num2");//不推荐,计算机解析2次

2、函数没有重载

3、作为值的函数,函数本身就是变量,所以函数也可以作为值来使用。

function callSomeFunction(someFunction,someArgument)
{
  return someFunction(someArgument);
}

function add10(num){
  return num+10;
}

var result=callSomeFunction(add10,10);
alert(result); //20;

function getGreeting(name){
  return "Hello,"+name;
}
var result2=callSomeFunction(getGreeting,"Joy");
alert(result2);  //Hello,Joy

4、从一个函数返回另外一个函数,这是极为有用的一种方法

function creatComparisonFunction(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:"Za",age:28},{name:"Ni",age:29}];
data.sort(creatComparisonFunction("name"));
alert(data[0].name); //Ni

data.sort(creatComparisonFunction("age"));
alert(data[0].name); //Za

5、函数内部属性arguments和this,arguments包含传入函数中的所有参数,这个对象还有一个calle属性,该属性是一个指针,指向拥有这个arguments对象的函数。

递归算法  阶乘
function factorial(sum)
{
    if(num<=1)
    {
      return 1;  
    } else{
      return num*arguments.calle(num-1)  
    } 
}
var trueFactorial=factorial;
factorial=function(){
  return 0;  
}
alert(trueFactorial(5)); //120
alert(factorial(5));  //0

6、函数属性和方法,length(表示参数的个数),prototype

7、apply()和call()方法,在特定的作用域中调用函数。apply接收2个参数,一个是在其中运行函数的作用域,另外一个可以是参数数组也可以是arguments对象。call()接收参数的方式为,第一个是this值,其余参数都直接传递给函数。apply和call真正的用武之地是扩充函数.

8、bind()方法,创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

window.color="red";
var o={color:"blue"};
function sayColor(){
    alert(this.color);
}
var objectSayColor=sayColor.bind(o);
objectSayColor();  //blue;
原文地址:https://www.cnblogs.com/yuyu9988/p/3354787.html