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
创建函数对象:
[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
相关文章推荐
- javascript基础总结(三)--Function类型
- JavaScript中的Function类型总结
- javascript中undefined类型总结
- [转] 对于javascript的function的总结
- JavaScript数据类型转换方法总结(转)
- 看了让你有收获的JavaScript的基本类型总结
- JavaScript中的数据类型总结
- 对于javascript的function的总结
- (11)javascript 引用类型 Function类型
- javascript中的数据类型、Object与Function
- javascript中的数据类型、Object与Function
- JavaScript中判断对象类型的几种方法总结
- 类型转换总结(JavaScript: The Definitive Guide学习摘要3)
- 【Function类型】JavaScript中的原生对象以及Microsoft AJAX Library中的相关扩展
- javascript中的数据类型、Object与Function
- Javascript之Function类型
- javascript中undefined类型总结
- JavaScript学习总结_二.数据类型
- javascript 基础 Function类型
- javascript-Function类型整理