JavaScript中的Function类型总结

来源:互联网 发布:域名审核通过以后 编辑:程序博客网 时间:2024/05/17 22:30

创建函数对象:

//函数声明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);//=>300
2)作为值的参数

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

function callSomeFunction(someFunction,someArgument){return someFunction(someArgument);};function add10(num){return num+10;};var result1=callSomeFunction(add10,10);console.log(result1);//=>20function 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);//=>Alexdata.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();//=>redo.sayColor=sayColor;o.sayColor();//=>blue
3.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);//=>1console.log(sum.length);//=>2console.log(sayHi.length);//=>0
4.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));//=>20console.log(callSum2(10,20));//=>30console.log(callSum2(20,20));//=>40
//利用apply()、call()扩充函数赖以运行的作用域window.color="red";var o={color:"blue"};function sayColor(){console.log(this.color);}sayColor.call(this);//=>redsayColor.call(window);//=>redsayColor.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










0 0