函数

函数

  • 定义方式,以绝对值函数为例

    一旦执行到return,代表函数结束,返回结果;如果没有执行return,函数执行完也会返回结果undefined

    //第一种
    function abs(x){
        if(x>=0){
            return x;
        }else{
            return -x;
        }
    }
    //第二种,匿名函数,可以把结果赋值给abs,通过abs就可以调用函数
    var abd = function(x){
        if(x>=0){
            return x;
        }else{
            return -x;
        }
    }
    
  • 参数问题:JavaScript可以传任意个参数,也可以不传参数

    • 假设不存在参数,如何规避

      var abd = function(x){
          //手动抛出异常来判断
          if(typeof x!== 'number'){
              throw 'Not a Number'
          }
          if(x>=0){
              return x;
          }else{
              return -x;
          }
      }
      
    • 多个参数的问题

      • arguments是一个JavaScript免费赠送的关键字,代表传递进来的所有参数,是一个数组
      var abd = function(x){
          console.log("x=>"+x);
          for(var i = 0;i < arguments.length;i++){
              console.log(arguments[i]);
          }
          //判断默认第一个参数
          if(x>=0){
              return x;
          }else{
              return -x;
          }
      }
      //x=>1
       1
       25
       8522
       1
      

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

      rest参数只能写在最后,必须使用…标识

      function aaa(a,b,...rest){
          console.log("a=>"+a);
          console.log("b=>"+b);
          console.log(rest);
      }
      //aaa(22,31,2222,1)
       a=>22
       b=>31
       (2) [2222, 1]
      
    • 变量的作用域

      • 在JavaScript中,var定义变量是有作用域的。

        • 假设在函数体中声明,则在函数体外不可使用(闭包可实现)
        • 如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
        • 内部函数可以访问外部函数的成员,反之则不行
        • 函数查找变量是从自身函数开始,由内向外查找,即采用就近原则
        • 默认规范:所有变量定义都放在函数头部,便于代码维护。
      • 全局对象window,默认所有全局变量都会自动绑定在window对象下,alert()函数本身也是一个window变量

        var x=10;
        alert(x);
        alert(window.x);
        var old_alert = window.alert; //old_alert(x)也可以弹出
        window.alert = function(){}; //此时alert()失效了
        window.alert = old_alert; //恢复
        
      • 全局变量:由于所有的全局变量都会绑定在window上,如果不同的js文件,使用了相同的全局变量,如何减少冲突?把自己代码全部放入自己定义的为一空间名字中,降低全局命名冲突的问题

        //唯一全局变量
        var jsApp = {};
        //定义全局变量
        jsApp.name = 'zhangshan';
        jsApp.add = function(a,b){
            return a + b;
        }
        
      • 局部作用域let:解决局部作用域冲突的问题,推荐使用。

      • 常量const:值不可变

posted @ 2021-05-11 14:48  saxon宋  阅读(78)  评论(0)    收藏  举报