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

JavaScript中的Function类型总结

2016-05-29 12:21 841 查看
创建函数对象:

//函数声明
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)没有重载:
var addSomeNumber=function(num){
return num+100;
};
addSomeNumber=function(num1,num2){
return num1+200;
}
var result=addSomeNumber(100);
console.log(result);//=>3002)作为值的参数
2.1)像传递参数一样把一个函数传递给另一个函数

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)将一个函数作为另一个函数的结果返回
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对象的函数

function factorial(num){
if(num<=1){
return 1;
}else{
//利用arguments.callee指向本函数来消除紧密耦合
return num*arguments.callee(num-1);
}
};3.2)this对象:引用的是函数据以执行的环境对象
window.color="red";
var o={color:"blue"};
function sayColor(){
console.log(this.color);
}
sayColor();//=>red
o.sayColor=sayColor;
o.sayColor();//=>blue3.3)caller属性:保存着调用当前函数的函数的引用
function outer(){
inner();
};
function inner(){
console.log(arguments.callee.caller);
};
outer();//=>function outer(){inner();}

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

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);//=>04.2)apply()、call():在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
apply():接收两个参数:一个是在其中运行函数的作用域,另一个参数数组。

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

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
//利用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+
window.color="red";
var o={color:"blue"};
function sayColor(){
console.log(this.color);
}
var objectSayColor=sayColor.bind(o);
objectSayColor();//=>blue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript