您的位置:首页 > Web前端 > JavaScript

JavaScript中的Function类型总结

2017-03-26 15:43 459 查看
http://blog.csdn.net/bboyjoe/article/details/51531254

创建函数对象:

[javascript] view
plain copy

 





//函数声明  

function sum(num1,num2){  

    return num1+num2;  

};  

//函数表达式  

var sum=function(num1,num2){  

    return num1+num2;  

};  

//使用Function构造函数(不推荐)  

var sum=new Function("num1","num2","return num1+num2");  

1)没有重载:

[javascript] view
plain copy

 





var addSomeNumber=function(num){  

    return num+100;  

};  

addSomeNumber=function(num1,num2){  

    return num1+200;  

}  

var result=addSomeNumber(100);  

console.log(result);//=>300  

2)作为值的参数

2.1)像传递参数一样把一个函数传递给另一个函数

[javascript] view
plain copy

 





function callSomeFunction(someFunction,someArgument){  

    return someFunction(someArgument);  

};  

function add10(num){  

    return num+10;  

};  

var result1=callSomeFunction(add10,10);  

console.log(result1);//=>20  

function getGreeting(name){  

    return "Hello, "+name;  

}  

var result2=callSomeFunction(getGreeting,"Jason");  

console.log(result2);//=>Hello, Jason  

2.2)将一个函数作为另一个函数的结果返回

[javascript] view
plain copy

 





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:'Jason',age:28},{name:"Alex",age:29}];  

data.sort(createComparisonFunction("name"));  

console.log(data[0].name);//=>Alex  

data.sort(createComparisonFunction("age"));  

console.log(data[0].name);//=>Jason  

3)函数内部属性

3.1)arguments:保存函数参数的类数组对象

arguments.callee:是一个指针,指向拥有这个arguments对象的函数

[javascript] view
plain copy

 





function factorial(num){  

    if(num<=1){  

        return 1;  

    }else{  

        //利用arguments.callee指向本函数来消除紧密耦合  

        return num*arguments.callee(num-1);  

    }  

};  

3.2)this对象:引用的是函数据以执行的环境对象

[javascript] view
plain copy

 





window.color="red";  

var o={color:"blue"};  

function sayColor(){  

    console.log(this.color);  

}  

sayColor();//=>red  

o.sayColor=sayColor;  

o.sayColor();//=>blue  

3.3)caller属性:保存着调用当前函数的函数的引用

[javascript] view
plain copy

 





function outer(){  

    inner();  

};  

function inner(){  

    console.log(arguments.callee.caller);  

};  

outer();//=>function outer(){inner();}  

4)函数属性和方法

4.1)length属性:表示函数希望接收的命名参数的个数

[javascript] view
plain copy

 





function sayName(name){  

    return name;  

};  

function sum(num1,num2){  

    return num1+num2;  

};  

function sayHi(){  

    return "hi";  

};  

console.log(sayName.length);//=>1  

console.log(sum.length);//=>2  

console.log(sayHi.length);//=>0  

4.2)apply()、call():在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

apply():接收两个参数:一个是在其中运行函数的作用域,另一个参数数组。

call():与apply()方法的作用相同,区别在于接收参数的方式不同。

[javascript] view
plain copy

 





function sum(num1,num2){  

    return num1+num2;  

}  

function callSum1(num1,num2){  

    return sum.apply(this,arguments);//传入arguments对象  

}  

function callSum2(num1,num2){  

    return sum.apply(this,[num1,num2]);//传入数组  

}  

function callSum3(num1,num2){  

    return sum.call(this,num1,num2);//call()接收参数的方式不同  

}  

console.log(callSum1(10,10));//=>20  

console.log(callSum2(10,20));//=>30  

console.log(callSum2(20,20));//=>40  

[javascript] view
plain copy

 





//利用apply()、call()扩充函数赖以运行的作用域  

window.color="red";  

var o={color:"blue"};  

function sayColor(){  

    console.log(this.color);  

}  

sayColor.call(this);//=>red  

sayColor.call(window);//=>red  

sayColor.call(o);//=>blue  

4.3)bind():会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。IE9+

[javascript] view
plain copy

 





window.color="red";  

var o={color:"blue"};  

function sayColor(){  

    console.log(this.color);  

}  

var objectSayColor=sayColor.bind(o);  

objectSayColor();//=>blue  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: