函数

作者: 张Boy | 来源:发表于2016-11-02 10:58 被阅读9次

    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函数成功将这个重载问题搞定,以后用那个就看个人兴趣啦啦啦~
    

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

    相关文章

      网友评论

        本文标题:函数

        本文链接:https://www.haomeiwen.com/subject/bzdvuttx.html