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)将一个函数作为另一个函数的结果返回
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
window.color="red";
var o={color:"blue"};
function sayColor(){
console.log(this.color);
}
var objectSayColor=sayColor.bind(o);
objectSayColor();//=>blue
//函数声明
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);//=>Jason3)函数内部属性
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);//=>blue4.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
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享