本文共 3148 字,大约阅读时间需要 10 分钟。
http://blog.csdn.net/bboyjoe/article/details/51531254
创建函数对象:
-
- function sum(num1,num2){
- return num1+num2;
- };
-
- var sum=function(num1,num2){
- return num1+num2;
- };
-
- 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);
2)作为值的参数
2.1)像传递参数一样把一个函数传递给另一个函数
- function callSomeFunction(someFunction,someArgument){
- return someFunction(someArgument);
- };
- function add10(num){
- return num+10;
- };
- var result1=callSomeFunction(add10,10);
- console.log(result1);
- function getGreeting(name){
- return "Hello, "+name;
- }
- var result2=callSomeFunction(getGreeting,"Jason");
- console.log(result2);
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);
- data.sort(createComparisonFunction("age"));
- console.log(data[0].name);
3)函数内部属性
3.1)arguments:保存函数参数的类数组对象
arguments.callee:是一个指针,指向拥有这个arguments对象的函数
- function factorial(num){
- if(num<=1){
- return 1;
- }else{
-
- return num*arguments.callee(num-1);
- }
- };
3.2)this对象:引用的是函数据以执行的环境对象
- window.color="red";
- var o={color:"blue"};
- function sayColor(){
- console.log(this.color);
- }
- sayColor();
- o.sayColor=sayColor;
- o.sayColor();
3.3)caller属性:保存着调用当前函数的函数的引用
- function outer(){
- inner();
- };
- function inner(){
- console.log(arguments.callee.caller);
- };
- outer();
4)函数属性和方法
4.1)length属性:表示函数希望接收的命名参数的个数
- function sayName(name){
- return name;
- };
- function sum(num1,num2){
- return num1+num2;
- };
- function sayHi(){
- return "hi";
- };
- console.log(sayName.length);
- console.log(sum.length);
- console.log(sayHi.length);
4.2)apply()、call():在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
apply():接收两个参数:一个是在其中运行函数的作用域,另一个参数数组。
call():与apply()方法的作用相同,区别在于接收参数的方式不同。
- function sum(num1,num2){
- return num1+num2;
- }
- function callSum1(num1,num2){
- return sum.apply(this,arguments);
- }
- function callSum2(num1,num2){
- return sum.apply(this,[num1,num2]);
- }
- function callSum3(num1,num2){
- return sum.call(this,num1,num2);
- }
- console.log(callSum1(10,10));
- console.log(callSum2(10,20));
- console.log(callSum2(20,20));
-
- window.color="red";
- var o={color:"blue"};
- function sayColor(){
- console.log(this.color);
- }
- sayColor.call(this);
- sayColor.call(window);
- sayColor.call(o);
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();