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

    函数:由一堆代码组成,实现了某个功能,可以直接执行或通过行为调用的代码段

    函数的特点:选择使用,重复使用,忽略细节

    函数的创建方式:

    1. 声明式:function fn(){ }          声明函数关键字function
    2. 赋值时:var  fn=function(){ }       声明关键字var

    函数的执行方式:1.函数名+();     2.行为调用,通过事件执行

    回调函数:将函数A作为参数,传到另一个函数B中,在函数B中执行函数A,那么作为参数的函数A就是回调函数

    function( ){ }:

    1  //格式
    2  function       //声明关键字
    3  fn              //函数名
    4  ( )             //参数
    5  { }            //执行语句(函数体)

    函数的参数:

    函数在执行时,的参数叫:实参

    函数在定义时,的参数叫:形参

    实参被形参接收并保存

    形参相当于变量,实参相当于赋的值

     形参多,多的形参是undefined

    实参多,多出来的实参找arguments

    参数可以有多个:

    形参和实参的数量一致:一一对应
    形参多,实参少:多出来的形参是undefined
    形参少,实参多:多出来的实参被传到函数中一个神秘的区域,arguments
    注意:实参可以传递任何数据,相当于变量中可以保存任何数据

    demo:

     1 //比较两个数的大小
     2 <!DOCTYPE html>
     3   <html>
     4      <head>
     5          <meta charset="utf-8" />
     6          <meta name="viewport" content="width=device-width, initial-scale=1">
     7          <title></title>
     8      </head>
     9      <body>    
    10      </body>
    11      <script>
    12         function fn(a,b,c){
    13              if(a > b && a > c){
    14                  if(b > c){
    15                      console.log(c,b,a);
    16                  }else{
    17                      console.log(b,c,a)
    18                }
    19              }else if(b > a && b > c){
    20                 if(a > c){
    21                     console.log(c,a,b)
    22                  }else {
    23                     console.log(a,c,b)
    24                }
    25              }else if(c > a && c > b){
    26                      consle.log(b,a,c);
    27               }else{
    28                      console.log(a,b,c);
    29                  }
    30              }
    31        }
    32          fn(34,54,4)
    33     </script>
    34  </html>

    函数的分类:

    1.有名函数,声明式创建的函数,正常函数,正常执行,正常使用
    2.无名函数,非正常函数,不允许直接存在
               可以作为值存在---->赋值式创建函数
               可以作为实参存在---->回调函数
               可以作为行为处理函数存在---->事件处理函数
              可以作为匿名函数的函数体存在---->匿名函数
    3.匿名函数,立即执行,好像没写函数一样(function(){})()

     arguments是函数内部的一个专门用来存储所有实参的数组对象

    demo:

     1 function fn(a){
     2          console.log(arguments)
     3          console.log(arguments.length)
     4          console.log(arguments[0])
     5          console.log(arguments[1])
     6          console.log(arguments[2])
     7         var i=0;
     8         while(i<arguments.length){
     9             console.log(arguments[i])
    10             i++;
    11         }
    12  }
    13   fn("hello",123,true,1,2,3,4)

    小练习:

    编写一个函数,计算任意两个数字之间所能组成的两位数的奇数,数字必须是个位数,(比如: 计算0,3之间能组成的奇数个是01、21、03、13、23、31)

     1 //编写一个函数,计算任意两个数字之间所能组成的两位数的奇数,数字必须是个位数,(比如: 计算0,3之间能组成的奇数个是01、21、03、13、23、31)
     2 <script>
     3     function getOdd(a,b){
     4         if(a > b){
     5             var ls = a;
     6             a = b;
     7             b = ls;
     8         }
     9         var i=a;
    10         while(i<=b){
    11             // console.log("这是外层循环的:"+i)
    12             var j=a;
    13             while(j<=b){
    14                 // console.log("这是内存循环的:"+j)
    15                 if(("" + i + j) % 2 != 0 && i != j){
    16                     console.log("" + i + j)
    17                 }
    18                 j++
    19             }
    20             i++;
    21         }
    22     }
    23     getOdd(0,3)
    24 </script>

    数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文

     1 //数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文
     2 <script>
     3     function encryption(num){
     4         var a = parseInt(num/1000);
     5         var b = parseInt(num/100)%10;
     6         var c = parseInt(num/10)%10;
     7         var d = num%10;
     8 
     9         a += 5;
    10         b += 5;
    11         c += 5;
    12         d += 5;
    13   
    14         a %= 10;
    15         b %= 10;
    16         c %= 10;
    17         d %= 10;
    18 
    19         var ls = a;
    20         a = d;
    21         d = ls;
    22 
    23         ls = b;
    24         b = c;
    25         c = ls;
    26         console.log(""+a+b+c+d)
    27     }
    28 
    29     encryption(3716)
    30 </script>

    自执行函数:这种函数没有名称,只有声明体,实际上是一个 匿名自我调用的函数。这种函数的好处是保持变量独立,不被外部变量污染,形成一个封闭的函数执行环境。

     1 function(){
     2  
     3 })();
     4 ;(function(context,win){
     5 <br>
     6 })
     7 
     8 
     9 var divs=tr.getElementsByTagName("div");
    10 for(var  i=0;i<divs.length;i++){
    11      (function(div){
    12       div.onclick=function(){
    13       alert(this.innerHTML);
    14       }
    15 })(divs[i])
    16  
    17 }

    高阶函数:英文叫Higher-order function。JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。简单的说法就是“高阶函数就是可以把函数作为参数,或者是将函数作为返回值的函数。”,其实最典型的应用就是回调函数了。

    1.函数回调

    1 $.get(' ',{},function(data){
    2  
    3 })
    4  
    5 var   test=function(callback){
    6         callback.apply(this,arguments)
    7  
    8 }

    2.函数柯里化:在一个函数中首先填充几个参数(然后再返回一个新函数)的技术称为柯里化(Currying),柯里化函数里面定义一个局部变量arr数组,然后返回一个函数,返回的函数体里对变量arr进行了赋值,每次当函数传入参数的时候都会将参数push到arr里面,然后返回函数体,形成了一个闭包。当没有参数传入的时候就直接执行传入的sum函数,然后执行函数sum传入的的参数就是arr.

    这个定义可能有点难理解,先看下一个简单的函数

     1 var  sum=function(){
     2       var total=0;
     3       var  argArr=arguments;
     4        for (var i = 0; i < argArr.length; i++) {
     5               total+=argArr[i];
     6    }  
     7          return  total;
     8  }      
     9 var test=  currency(sum);          
    10 test(100,200);
    11 test(300)
    12 alert(test());
  • 相关阅读:
    Coursera Algorithms Programming Assignment 2: Deque and Randomized Queue (100分)
    Coursera Algorithms week1 查并集 练习测验:3 Successor with delete
    Coursera Algorithms week1 查并集 练习测验:2 Union-find with specific canonical element
    项目选题报告答辩总结
    项目UML设计(团队)
    第七次作业--项目需求分析(团队)
    结对项目--第二次作业
    【软件工程实践 · 团队项目】 第二次作业
    第五次作业--原型设计(结对)
    团队项目系列博客 —— 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号)
  • 原文地址:https://www.cnblogs.com/cx1215/p/11406206.html
Copyright © 2011-2022 走看看