JS函数

作者: 是小张啊啊 | 来源:发表于2018-06-29 23:54 被阅读0次
    函数声明
    • 下面为具名函数声明 函数名:fn ,声明的后面不需要加分号
    • 函数在声明的时候并没有进行执行,只是将自己的内部作为一个代码块存了起来,只有在调用函数的时候才会执行该函数体里面的内容
    • 函数的执行: 函数名 + ()-->fn();表示执行fn()函数,函数执行部分场合,在哪都可以执行,都可以进行调用,不一定都是在函数的声明之后进行函数的调用执行.
    function fn(){
    
    }
    
    • 在函数声明的后面加()是不会执行的,并且会报错.因为它的声明并不是一个语句.
    function fn(){
    
    }()//错误的!!!
    
    • 匿名函数是不能莫名其妙的出现,除非是在赋值,传参,等场景下出现.
    function() {
      alert(1);
    }//匿名函数!!
    
    函数表达式
    • 如下是把一个匿名函数作为一个只赋值给变量 fn
    • 函数表达式后面需要加分号,因为这是一个赋值语句
    • 函数表达式执行:变量名 + ();
    var fn = function(){//匿名函数赋值,常用方法
      alert(1);
    };
    fn();//变量表达式执行
    console.log(fn);//---->f(){alert(1);}
    
    • 函数表达式可以在末尾 + () 进行函数执行
    var fn = function(){//匿名函数赋值,常用方法
      alert(1);
    }();//变量表达式可以执行
    //fn();此时该变量名 + () 不可以执行 该变量表达式,会报错!!!!
    
    var fn = function ab(){//具名函数赋值
      alert(1);
    };
    fn();//变量表达式同样执行,ab()不可以进行执行,会报错!!!
    console.log(fn);//---->f ab(){alert(1);}
    
    匿名(具名)函数转函数表达式
    • 即匿名函数立即执行(IIFE)
      作用:1.节省变量;2.私有变量的问题
    (function (){//匿名函数
      alert(1);
    })();//末尾的()表示调用
    
    (function fn(){//具名函数
      alert(1);
    })();//末尾的()表示调用
    

    以下方法也可以执行

    !function(){
      alert(1);
    }();
    
    ~function(){
      alert(1);
    }();
    
    +function(){
      alert(1);
    }();
    
    (function(){
      alert(1);
    }());
    
    形参和实参(两者位置一一对应)
    • 形参:函数名后面()里的参数,称之为形式上的参数
    function fn(a,b){
      console.log(1);
    }
    
    • 实参:实际上的参数(实际上要传给函数赋值给形参a的值)
    fn(2,3);
    
    • 形参和实参两者位置一一对应
    function fn(a,b){
      console.log(a+b);
    }
    fn(2,3,4);----->2=a,b=3,4没有对应,结果为5
    
    function fn(a,b){
      console.log(a+b);
    }
    fn(2);----->2=a,b没有对应赋值,即b声明的但是没有进行赋值结果为NaN
    fn("2");----->字符串+undefined,结果是"2undefined".
    
    arguments
    • 仅仅只存在于函数中,它是客观存在的
    • 是一个类数组,可以通过下标得到对应的元素
    • 它保留的是此函数所有的实参
    function add(){
      console.log(arguments);
      console.log(arguments.length);
      var sum = 0;
      for(var i = 0;i<arguments.length;i++){
        sum += arguments[i];
      }
    }
    add(1,2,3,4,5);
    
    • arguments.callee 表示的是函数自身
    function (){
      console.log(arguments.callee);
    }
    
    return函数返回值
    • 凡是运算都有返回值!!!!
    • 函数的执行也是一种运算,也有返回值!!!
    • 默认情况下,函数运算执行的返回值是undefined
    • return 改变函数执行的返回值
    • return 阻断函数的执行
    • return 只能在函数中使用
    function fn(){
      return 10;//直接退出
      console.log(1);//函数不会执行该语句
    }
    fn();//执行该函数
    console.log(fn());//返回值为10
    
    练习1
    document.onclick = function () {
            fn(2);
        };    
        function fn(x) {
            alert(x);
        }
    
    • 回调函数(把函数作为一个参数传递)
       //声明一个名为fn1 的函数,fn2为此函数的一个形参
       function fn1(fn2) {
           fn2(2);//调用fn2()函数执行此函数,传2,alert(2);
       }
       //执行fn1函数
        fn1(
            //给变量fn2赋值一个函数,给此函数传一个参数x
            fn2 = function (x) {
                alert(x);
            }
        );
    
    var x;
       x = function () {
           alert(1);
       };//函数没有被执行
       console.log(x);//x = ƒ () {alert(1);}
    
    var x;
       x = function () {
           alert(1);
       }();//函数被执行
       console.log(x);//x = undefined,函数的返回值为undefined
    
    练习2
    document.onclick = fn;//函数在点击的时候才会被执行
       function fn() {
               alert(1);
      }
    console.log(fn());//fn()的返回值为undefined
    
    document.onclick = fn();//在点击时,函数执行的是里面的return function(){alert(1);}
    
       function fn() {
           return function(){
               alert(1);
           }
      }
    
    document.onclick = fn()();
    
       function fn() {
           return function(){
              return function(){
                 alert(1);
              }
           }
      }
    console.log(fn();)//返回的是:f(){return function(){alert(1);}}
    
    console.log(fn()();)//返回的是:f(){alert(1);}
    
    fn()()();执行该函数
    
    document.onclick = fn()();///对于onclick来说:用两个()()进行函数执行
    
    拓展arguments
    function add(num){
      if(num > 1){
        return num += add(num-1);
      }else{
         return num;
      }  
    }
    add(10);
    console.log(add(10));
    
    • 函数没有名字时,使用arguments,callee对函数自身进行调用.
    var add = (function (num){
      if(num > 1){
        return num += arguments.callee(num-1);
      }else{
         return num;
      }  
    })(10);
    console.log(add);
    

    相关文章

      网友评论

          本文标题:JS函数

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