函数

js的函数可以大致理解为c/c++/java里面的函数,但要比他们活跃的多,他是我们模块化编程的基础,也是下面js进阶的关键,这也是为什么把它单拿出来的写的原因。

  • 我们先来看一个简单的函数
function add(a,b){    //定义一个add函数,他需要两个参数a,b;
      console.log(a+b)  //该函数的操作结果是打印a和b的和;
}
add(1,2);  //执行函数,实参为1,2;
  • 这里我们可以看到函数的定义要比其他的语言要简单的多,只需要function关键字(注意都是小写,因为还有Function函数对象,下来我们会讲解)
  • 当然,我们开始就说了js函数是非常灵活的,他也可以用声明变量的形式定义,如下:
var add = function(a,b){          
      console.log(a+b); 
}
add(1,2);
  • 这里我们看到和上面声明的方式并没有太大的区别,但这里有一个js的理念就是一切皆对象,函数也是对象,我们先声明了一个函数对象,然后赋值给变量add,下来直接调用变量就可以了~

  • 另一种定义方式就是Function,我们看一个例子

var add = new Function('a','b','console.log(a+b)');
  • Function就是我们进阶教程里要讲到的虚拟类,在实例化的时候前面的参数都是参数,后面的一个是函数体本身。应该是鉴于它比较麻烦,在实际应用中使用的并不多。

说完了如何定义函数,就要探讨一下函数的内部细节。。。

  • return关键字
    说到这里有过其他编程经验的人就会看到function的定义并不需要显示的声明有无返回值和返回值类型。对,就是这么任性,想返回就返回,不想返回就不返回(当然着需要根据函数的实际用途来定哈!);return关键字就是来干这个事的,返回值。
function add(a,b){
     return a+b;
}
add(10,20);
  • 这里我们依旧用这个简单的不能再简单的add函数,唯一的改变就是里面不再是console/document.write等方法,改成了return,当我们调用add函数的时候,函数就返回给我们两个参数的和。当然,return也是比较任性的,想返回啥就返回啥,而且啥类型都可以,这个自己可以去尝试,在此不赘述!

  • arguments关键字/对象
    它是函数的一个核心,函数本身就是封装提高复用性,所以在不同的环境中,不同参数的引入就成了函数的关键。上面的例子我们已经看到在add函数中有a和b两个形参,这是显示定义形参的方式,下面我们把其他方式看一下。

function add(){
    //console.log(arguments);  //输出[object arguments]
     var a = arguments[0];
    var b = arguments[1];
    return a+b;
}
add(10,20);
  • 在这里我们并没有显示的定义形参,但执行函数同样会输出30;这就要归功与arguments对象,在函数执行时,arguments获取实参列表。原则上可以定义任意多的参数,但在保证不报错的情况下少于255(当然没人会这么搞,-);
  • 上面我们写的函数都是知道多少个参数的情况下写的,在有些时候我们是不知道多少个参数的,这时候我们就需要用上重载,重载有两种方式
    • 第一种:
function add(){
    if(arguments.length == 1){
       return arguments[0]; 
   }else if(arguments.length == 2){
       return arguments[0]+arguments[1];
   }else if(...){
      ...
   }
}
add(1,2);
add(1,2,3);
//好尴尬,如果只有一两个还好,如果多的话就挂了..0.0..
  * 第二种
function add(){
      var count = 0;  //函数内部定义局部变量
      for(i in arguments){
          count+=arguments[i];     
     }
     return count;
}
add(1);
add(10,20);
add(100,200,300);
//通过for-in函数成功将这个重载问题搞定,以后用那个就看个人兴趣啦啦啦~

函数基础基本就是这样了,在进阶教程中会讲述基础函数的封装/闭包/类等,凡是欲速则不达,打好基础才是进阶的关键。

你可能感兴趣的:(函数)