Javascript自学-6

  • 函数的概念
    • 函数,是将一段公共的代码进行封装,给它起个名字叫“函数”。
    • 函数可以一次定义,多次调用。
    • 函数,可以将常用的功能代码进行封装。如:用户名的验证、验证码函数、邮箱验证
      <script type="text/javascript">
          /*1.求0和5的最大值
            2.求10和20的最大值
           */
           function getMax(a,b){
               if(a>b)
               {
                   document.write(a+"大!<br>");
               }else{
                   document.write(b+"大!<br>");
               }
           }
           getMax(0,5);
           getMax(10,20);
          </script>
  • 函数的定义格式
    function functionName([参数 1],[参数 2],[参数 N]){
            函数的功能代码;
            [return 参数 r]
    }
    • 函数定义格式的说明
      • function关键字是必须的,全小写。
      • funtionName:函数的名称。函数名的命名规则与变量命名一样。
      • ():定义函数时接收数据的参数。参数可有可无,多个参数之间用逗号隔开。
        • 形参(形式参数):定义函数时的参数就是“形参”。主要用来接收调用函数者传过来的数据。
          • 形参的名称,与变量的命名规则一样。
          • 但形参不能用var关键字定义。
          • 参数只能存在于函数中。
          • 参数不需要声明,直接使用
        • 实参(实际参数):调用函数时的参数称为“实参”。实参就是真正的数据。
      • {}是函数的功能。
      • return语句,用于向函数调用者返回一个值,并立即结束函数的运行。
        • return用于中止函数的运行。
        • break用于中止各种循环。
    • 函数的调用
      • 函数定义是不会执行的,函数必须调用,才会有效果。
      • 函数的调用:直接写函数名后跟小括号(),如果有参数则写参数。小括号不能省略。
      • 函数的定义和调用部分顺序。
            // 定义函数
            function showInfo()
            {
                document.write("张三的年龄是24岁!");
            }
            // 调用函数
            showInfo();<span style="font-size: 16px;"></span>

    • 函数的参数
      • 形参的个数,要与实参的个数一致;
      • 形参的顺序,要与实参的顺序一致;
  • 全局函数和局部函数
    • 全局变量:
      • 可以在网页的任何地方(函数内部和函数外部)使用的变量,就是“全局变量”
      • 在函数外部定义的变量,就是“全局变量”。
      • “全局变量”既可以在函数外使用,也可以在函数内部使用。
      • “全局变量”在网页关闭时自动消失(释放空间)。
    • 局部变量:
      • 只能在函数内部使用的变量,成为“局部变量”。
      • “局部变量”在函数内部定义,在函数内部使用。
      • “局部变量”在函数外部无法访问。
      • “局部变量”在函数执行完毕就消失了。
            // 全局变量
            var name = "张三";
            function showInfo()
            {
                // 局部变量
                var age = 24;
                document.write(name+"的年龄是:"+age+"岁.<hr />");
            }
            // 调用函数
            showInfo();
            /*以下程序报错,说age变量不存在
              因为age变量是局部变量,函数执行完毕,局部变量就消失了*/
            document.write(name+"的年龄是:"+age+"岁");
        
            // 全局变量
            var name = "张三";    //全局变量
            var age;    //全局变量
            function showInfo()
            {
        
                age = 24;    //给全局变量赋值
                // 以下的age是全局变量
                document.write(name+"的年龄是:"+age+"岁.<hr />");
            }
            // 调用函数
            showInfo();
            // 以下输出正常,此时age为全局变量
            document.write(name+"的年龄是:"+age+"岁");
        
            // 全局变量
            var name = "张三";    //全局变量
            var age;    //全局变量
            function showInfo()
            {
        
                age = 24;    //给全局变量赋值
                // 以下的age是全局变量
                document.write(name+"的年龄是:"+age+"岁.<hr />");
            }
            // 以下程序age变量的值为undefined
            document.write(name+"的年龄是:"+age+"岁.<hr />");
            // 调用函数
            showInfo();
        
            // 全局变量
            var name = "张三";    //全局变量
        
            function showInfo()
            {
                age = 24;    //全局变量
                document.write(name+"的年龄是:"+age+"岁.<hr />");
            }
            // 以下程序将报错,age不存在。
            document.write(name+"的年龄是:"+age+"岁.<hr />");
            // 调用函数
            showInfo();
        
    • 在函数内部,省略关键字var定义的变量是“全局变量”。
    • 注意:var关键字尽量别省略,省略后“全局变量”和“局部变量”会搞不清楚。
  • 拷贝传值和引用
    • 拷贝传值:基本数据类型都是“拷贝传值”
      • 拷贝传值,就是将一个变量的值“拷贝”一份,传给了另一个变量。
      • 拷贝传值中,两个变量之间没有任何联系,修改其中一个变量的值,另一个不会改变。
            // (1)拷贝传值:将一个变量的值“拷贝”一份,传给了另一个变量。
            var a = 10;        //声明变量
            var b = a;        //将变量a的值“拷贝”一份,赋给变量b
            a = 100;        //重新给变量赋值100
            alert(b);        //b = 10
            alert(a);        //a = 100<span style="font-size: 16px;"></span>
Javascript自学-6_第1张图片
    • 引用传址:复合数据类型都是“引用传址”
      • 复合数据类型的存储分两步:
        1. 变量名数据地址存在“快速内存”(栈内存)中;
        2. 具体的数据存在“慢速内存”(堆内存)中。
      • 基本数据类型存在“快速内存”(栈内存)中的。因为,基本数据类型只有一个变量名和变量值。
      • 引用传值:将一个变量的数据地址,“拷贝”一份,传给了另一个变量。这两个变量,指向了“同一个地址”。大家共享同一份数据。
      • 如果其中一个变量的值发生了改变,那么,另一个变量的值也得变。要变一起变。因此这两个变量是有联系的,要变大家一起变。
            var arr1 = ["张三",24,"大专"];
            var arr2 = arr1;        //将arr1的地址“拷贝”一份,传给了另一个变量arr2
            arr1[1] = 30;            //给变量arr1[1]重新赋值
            window.alert(arr2[1]);    //arr2[1]=30
        Javascript自学-6_第2张图片
    // 实例:引用传址的使用
    /*
        在函数外定义一个数组,通过传参的方式,传给函数。
        在函数内部给该数组的末尾增加一个元素
    */
    var arr = ["张三",24,"男"];
    function addElement(arr2)
    {
        // 给当前数组末尾增加一个“北京科技大学”的元素
        arr2[arr2.length] = "北京科技大学";
        /*
          arr2[3] = "北京科技大学"
        */
    }
    // 调用函数;将数组的地址“拷贝”一份,传给了函数参数
    addElement(arr);
    // 输出数组变量arr的值,会发现变成了4个元素
    document.write(arr);
  • 匿名函数:没有名字的函数。
    • 匿名函数不能单独定义的,也不能单独调用。
              // 以下写法是错误的
              // 定义函数
              function()
              {
                  document.wrtie("大家好");
              }
              // 调用函数<span style="font-size: 16px;"></span>
    • 匿名函数,一般是作为数据给其他变量赋值的。可以给普通变量、数组元素、对象的属性赋值。
          var a = 10;                //将数值赋给变量a,那么变量a就是“数值型”变量
          var a = "abc";            //将字符赋给变量a,那么变量a就是“字符型”变量
          var a = true;            //将布尔值赋给变量a,那么变量a就是“布尔型”变量
          var a = [10,20];        //将数组赋给变量a,那么变量a就是“数组型”变量
          var a = function(name,age){        //将函数赋给变量a,那么变量a就是“函数型”变量
                  window.alert(name+"的年龄是:"+age);
                  return a;
          }   
          a("张三",25);
          var b = a;                //将变量a的地址"拷贝"一份传给了变量b
          b("李四",20);<span style="font-size: 16px;"></span>
  • 二维数组
    • 给一个数组元素赋一个数组,那么,这个数组就是“二维数组”。
    • 二维数组跟表格很像
          var arr = [
                         [0,1,2,3,4],
                         [10,20,30,40],
                         [50,60,70,80],
                ];<span style="font-size: 16px;"></span>
    • 二维数组,就得用两层循环来实现。也就是说循环套循环
    • 二维数组的循环,与二维表格的循环一模一样。
    • 二维数组的访问:数组名后跟多个连续的中括号[],第1个中括号[]代表第一维数组,第2个中括号[]代表第二维数组。
              var arr = [
                  ["周更胜","男",30,true,"大专",5000,500,,"山东省"],
                  ["刘二狗","女",26,false,"研究生",8000,1500,"北京科技大学","山西省"],
                  ["系老黑","男",38,true,"大专",1000,250,"清华大学","山西省"],
                  ["利可汗","男",34,true,"高中",11000,30,"河北大学","江苏省"]
              ];
              var str = "<table width=600 border=1 rules=all align=center>";
               for(var i=0;i<arr.length;i++)
               {
                  str += "<tr>";
                  // a<小数组的长度
                  for(var a=0;a<arr[i].length;a++)
                      {
                          str += "<td>"+arr[i][a]+"</td>";
                      }   
                  str += "</tr>";
               }
              str += "</table>";
              document.write(str);

      显示效果:Javascript自学-6_第3张图片







你可能感兴趣的:(JavaScript,函数)