zoukankan      html  css  js  c++  java
  • js函数

    <!DOCTYPE html>
    <html>
     <head>
      <meta charset="UTF-8">
      <title></title>
      <script type="text/javascript">
       
    /*【函数的声明及调用】
     * 1、函数声明的格式:
     * function 函数名(参数1,参数2,……){
     *  //函数体
     *  return 结果;
     * }
     *
     * >>>函数调用的格式:
     * 直接调用:函数名(参数1的值,参数2的值,……)
     * 事件调用:onclick
     *
     *
     * 2、函数声明的几点强调:
     * ① 函数名的声明必须符合小驼峰法则:首字母小写,之后每个单词首字母大写;
     * ② 参数列表,可以有参数,可以无参数,分别称为有参函数,无参函数;
     * ③ 声明函数时的参数列表,称为“形参列表”(变量的名);
     *    调用函数时的参数列表,称为“实参列表”(变量的值);
     *   函数中实际有效的参数取决于实参的赋值,未被赋值的形参,将为Undefined;
     * ④ 函数如果需要返回值,可用return返回结果。
     *   调用函数时使用var 变量名 =函数名();的方式,接受返回结果;
     *   如果函数没有返回值,则接收的结果为Undefined;
     * ⑤ 函数中变量的作用域:
     *   在函数中使用var声明的变量,默认为函数局部变量,只在函数内容能用;
     *           不用var声明的变量,默认为全局变量;(函数中的全局变量,必须在函数调用后,才能使用)
     *   函数的形参列表,为函数局部变量,只在函数内部能用
     * ⑥ 函数声明与函数调用,没有先后之分,即,调用语句可写在声明语句之前
     */
       
       
       
    /*【匿名函数的声明及调用】
     * 1、声明一个匿名函数,直接赋给某个事件;
     * window.onload=function(){}
     * 2、使用函数表达式,声明匿名函数;
     *    声明函数表达式:var func3=function(){}
     *    调用函数表达式:func3();
     *    >>> 使用匿名函数表达式,则调用语句,必须在声明语句之后,否则报错(对比常规函数声明与调用的区别)
     * 3、使用自执行函数,声明并直接调用匿名函数
     * ① !function(参数1){}(参数1的值);  //使用任意运算符开头,一般使用!
     * ② (function(){}())   //使用小括号将匿名函数及之后的括号包裹
     * ③ (function(){})()   //使用()只包括匿名函数表达式
     *
     * 三种写法的特点:
     * ① 结构清晰,推荐使用;
     * ② 可以表明匿名函数鱼之后的()为一整体,推荐使用
     * ③ 不推荐使用;
     */
      /*
       function func1(){
        console.log("调用无参函数");
       }
       func1();
       
       window.onload=function(){
        console.log("使用window.onload调用匿名事件");
       }
       var func3=function(){
        console.log("使用函数表达式,调用匿名函数");
       }
       //此时只是声明了函数表达式,并没有调用,也执行了语句啊;
       console.log(func3);
       func3();
       (function(){
        console.log("使用自执行表达式,调用匿名函数");
       }())
       */ 
       
       
    //   console.log(num);
    //   var num = 10;
    //   funcN();
    //   function funcN(){}
    /* 上述代码执行流程:
     * JS中代码运行,会先检查、装载,即声明变量、函数等操作;
     * 然后再进入执行阶段,(变量的赋值等于执行阶段);
     * 所以函数的声明属于检查装载阶段,函数的调用属于执行阶段,所以,函数调用语句写在函数声明语句之前,并没有任何关系。
     *
     *
     * 所以上述代码,执行流入:
     * -----检查装载阶段----
     * var num;
     * function funcN(){}
     * -----执行阶段-------
     * console.log(num);
     * num = 10;
     * funcN();
     */
       
      /*function func2(num1,num2,num3){
    //    func1()
        var num=num1;
        console.log("调用有参函数");
        console.log("num为:"+num);
        console.log("参数1为:"+num1);
        console.log("参数2为:"+num2);
        console.log("参数3为:"+num3);
    //   return 1;
       }
       
       var num = func2(1,2,3);  //调用函数
       console.log(num);*/
      
    /*【Arguments对象】
     * 1、作用:用于保存调用函数时所赋值的实参列表。
     *   >>>当我们调用函数并使用实参赋值时,实际上参数已经保存到arguments数组中,即使没有形参,也可以使用
     *      arguments[n]的形式调用函数;
     *
     * 2、arguments数组的个数,取决于实参列表,与形参无关,(顺序从0开始);
     *    但,当第N个位置的形参、实参、arguments都存在时,形参与arguments是同步的。
     *    (即在函数中修改其中一个的值,另一个会同步变化)
     *
     * 3、arguments.callee是arguments的重要属性,用于返回arguments所在函数的引用;
     *    arguments.callee() 可以调用自身函数执行;
     *    在函数内部调用函数自身的写法,被称为递归,所以arguments.callee()是递归调用时常用的方式
     * 
     *    【This】
     *   指向函数调用语句所在的作用域,即,谁调用函数,this指向谁;
     *
     *
     */
       
       /*function func4(num1,num2,num3,num4,num5){
        console.log("Arguments对象");
        console.log(arguments[0]);
        console.log(arguments[1]);
        console.log(arguments[2]);
        console.log(arguments[3]);
        console.log(arguments[4]);
        console.log(arguments[4]==num5);
       }
       func4(1,2,3,4);*/
       
       
       
      /* var sum=0;
       !function func5(num){
         sum=sum+num;
        num++;
        if(num<=10){
         arguments.callee(num);
        }
       
       }(1);
       console.log(sum);*/
       
       /*var sum=0;
       !function func5(num){
        var ji=1;
        for(var v=1;v<=num;v++){
         ji=ji*v;
        }
         sum=sum+ji;
        num++;
        if(num<=10){
         arguments.callee(num);
        }
       
       }(1);
       console.log(sum);*/
       /*var sum=0;
       !function func5(num){
        var v=1;
        for(var j=1;j<=num;j++){
         v=v*j;
        }
        sum=sum+v;
        num++;
        if(num<=10){
         arguments.callee(num);
        }
       }(1);
       console.log(sum);*/
       
       var sum=0;
       !function func5(num){
        var jie=1;
        !function func6(num1){
         jie=jie*num1;
         num1++;
         if(num1<=num){
          arguments.callee(num1);
         }
        }(1);
        sum+=jie;
        num++;
        if(num<=10){
          arguments.callee(num);
        }
       }(1);
       console.log(sum);
       
       
       
      </script>
      
     </head>
     <body>
     
      <!--<button onclick="func1()">点击我调用无参函数</button>
      <button onclick="func2(prompt('请输入第一个数:'),prompt('请输入第一个数:'),prompt('请输入第一个数:'))">
       点击我调用有参函数</button>
      --> 
       
      
     </body>
    <html>

  • 相关阅读:
    韩寒做错了(update 4 12)。
    放弃IE6。
    阿弥陀佛,我没有“抄袭”。
    婚姻。
    爆牙齿饭否?
    地震之后——和妈妈对话。
    8年前,《西班牙,我为你哭泣。》
    在等决赛中提问。
    地震之后——中国互联网在黑夜中哭泣。
    年轻。
  • 原文地址:https://www.cnblogs.com/zhangxiaona/p/6686851.html
Copyright © 2011-2022 走看看