跳转至

07.函数

定义函数

方式1

Text Only
      function abs(x){
          if(x>0){
              return x;
          }else{
              return -x;
          }
      }

一旦执行到 return 代表函数结束,返回结果。

如果没有执行 return ,函数执行完也会返回结果,结果就是 undefined

方式2

Text Only
      var abs=function(x){
          if(x>0){
              return x;
          }else{
              return -x;
          }
      }

这是一个匿名函数。但是可以把结果赋值给 abs,通过abs 就可以调用函数

方式一和方式二等价

调用函数

Text Only
abs(10);//10

参数处理

参数问题: javaScript 可以传任意个参数,也可以不传递参数参数进来是否存在的问题? 假设不存在参数,如果规避?

Text Only
      var abs=function(x){
          if(typeof x!='number'){
              throw "Not a number";
          }
          if(x>0){
              return x;
          }else{
              return -x;
          }
      }

arguments

代表,传递进来的所有的参数,是一个数组

Text Only
      var abs=function(x){
          console.log("x="+x);
          for(var i=0;i<arguments.length;i++){
              console.log(arguments[i]);
          }
          if(typeof x!='number'){
              throw "Not a number";
          }
          if(x>0){
              return x;
          }else{
              return -x;
          }
      }

问题: arguments 包含所有的参数,我们有时候想使用多余的参数来进行附加操作

reset

以前

Text Only
          if(arguments.length>2){
              for(var i=2;i<arguments.length;i++){
                  console.log(arguments[i]);
              }
          }

现在

Text Only
      function aaa(a,b,...rest){
          console.log(a);
          console.log(b);
          console.log(rest);
      }

rest参数只能写最后面,必须用...标示

变量的作用域

在javascript中,var 定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用~(非要想实现的话,后面可以研究一下 闭包

Text Only
      function aaa(){
          var x=1;
          x=x+1;
      }
      x=x+2;//报错

如果两个函数使用了相同的变量名,只要在函数内部,就不冲突

内部函数可以访问外部函数的成员,反之则不行

方法