function函数

243 阅读2分钟

高内聚 低耦合

函数是另一种类型的变量

1 函数基本应用

例子

function test(){
    document.write("a");
    document.write("b");
    document.write("c");
}
test();
test();调用多少就写多少

例子

   function test() {
       var a = 123;
       var b = 234;
       var c = a + b;
       document.write(c);
   }
//    装很多语句,调用了text()才执行
   test();

定义函数的两种方法

一 函数声明 例子
 function theFirstName() {
 }
document.write(theFirstName); // 指代函数体,解释性语言不输出地址,
二 函数表达式
命名函数表达式

例子 函数名test.name="abc"

    var test = function abc(){
         document.write("a");
     }
匿名函数表达式 常用(简化为函数表达式)

例子的函数名demo.name="demo"

    var demo = function(){
        document.write("b");
    }

函数组成形式(函数名称+参数+返回值return)

function test(a,b){
    // 相当于声明了两个变量var avar b, 没有值,可以通过传递参数的形式给变量赋值test()
    document.write(a+b);
}
test(1,2);

例一

 function sum(a,b) {
     var c = a + b;
     document.write(c);
 }//  形式参数
 sum(13,2);//实际参数

例二

   function sum(a,b) {
       if(a>10) {
           document.write(a - b);
       }else if(a<10) {
           document.write(a + b);
       }else{
           document.write(10);
       }
   }
 sum(11,5);

形参和实参的个数可以不统一

例子

  function sum(a,b,c,d) {
      document.write(a);
      document.write(d);
  }
  sum(12,3,5);

例子 arguments -- [11,2,3] 实参列表,无论形参有没有接收完实参,arguments都会把实参当数组存起来

function sum(a,b,c) {
   
   console.log(sum.length);// 形参的长度
   console.log(arguments);
   console.log(arguments.length);// 实参的长度

//     有数组有长度可以循环圈数
   for(var i = 0; i < arguments.length; i++){
       console.log(arguments[i]);
     // 可以输出每一位
   }
}
sum(11,2,3,2,9);

例子

function sum(a,b,c,d,e){
if(sum.length>arguments.length){
        console.log("形参多")
    }else if(sum.length<arguments.length){
        console.log("实参多")
    }else{
        console.log("相等")
    }
}
sum(11,2,3,2);

求和的功能/加法计数器

  function sum() {
    //   arguments[1,2,3,4,5,6,7];不定参
    var result = 0;//接收变量
    for(var i = 0; i <arguments.length; i++){
        result += arguments[i];
    }
    console.log(result);
  }
  sum(1,2,3,4,5,6,7,8,9,)

// 1

  function sum(a,b) {
  //arguments [1,2]实参列表   
  //var a = 1;  
      a = 2;
      console.log(arguments[0]);
    //   看实参arguments的第0位和形参是不是一样
  }
  sum(1,2);
  结果:arguments[0]=2

例子

  function sum(a,b) {
    // 第一种
      a = 9
      console.log(arguments[0]);//arguments[0]=9
    // 第二种
      arguments[0] = 77;
      console.log(a);//a=77
  }
  sum(2,5,6)

例子

function sum(a,b) {
    b = 2;
    console.log(arguments[1]);
 // 只有完全相等的时候才会映射,不相等的时候undefined,不对应实参
  }
sum(1);
return
一、中止函数
function sum() {
    console.log("a");
    return;
    console.log("b");
}
sum(1,3);
二、值返回到函数外部并且终止函数
function sum(){
    // console.log("a");
    return 123;
    // console.log("a");
}
var num = sum();
//结果num=123
 function myNumber(target) {//target把目标转成数字并返回

    return   +target;//加号隐式调用number
 }
 var num = myNumber("123");
 console.log(typeof(num) + ":" +num);

练习题

1写一个函数,功能是告知你所选定的小动物的叫声

function scream(animal) {
    switch(animal) {
        case "dog":
            document.write("wang!");
            return;
        case "cat":
            document.write("miao");
            return;
        case "fish":
            document.write("o~o~o~");
            return;
    }
}

2 写一个函数,实现加法计数器

function sum() {
    var result = 0;
    for(var i = 0; i<arguments.length; i++){
        result += arguments[i];
    }
    document.write(result);
}
sum();//在里面打需要加的数字

3定义一组函数,输入数字,逆转并输出汉字形式

function reverse(){///reverse调用函数
    var num = window.prompt("input");
    var str = ""// 作为累加的容器    
   
    for(var i = num.length - 1; i >= 0; i--) {
        str += transfer(num[i]);
    }
    document.write(str);
}
 function transfer(target) {

    switch(target) {
        case "1" :
           return "壹";
        case "2" :
            return "贰";
        case "3" :
            return "叁";
    }
 }

4 写一个函数,实现n的阶乘 --------- 方法n! = n *(n - 1)!;

function jc(n) {
    if(n==1) {
        return 1;
    }
    return n * jc(n-1);
}

var n = parseInt(window.prompt("input"));

可输入的代表一种变量,参数也是一种变量,所以可以转化

// 方法一 累乘

    function mul(n) {
        
        // var num = 1;
        // for(var i = 1;i <= n; i++);
        // num*=i;

// 方法二 递归就是return公式,有递归先写return. (1.找到规律n! = n *(n - 1)! 2.用已知的东西找到出口跳出循环),让代码变得更简洁

        if(n == 1 || n == 0) {
            return 1;
        }
        return n * mul(n - 1);
    }
    mul(5);//控制台打印

5.写一个函数,实现斐波那契数列

规律 fn(n) = fb(n-1) + fb(n - 2);
         function fb(n) {
             if(n == 1 || n == 2) {
                return 1;
             }
             return fb(n-1) +fb(n-2);
         }
         fb(3);

运算过程

    fb(5) ==> fb(4) +fb(3);
    fb(4) ==> fb(3) +fb(2);
    fb(3) ==> fb(2) +fb(1) = 1 + 1;

引用值

    一 数组 arr[0]代表数组第一位 /以下例子
    var arr = [5,2,3,4,5,9,11];
    console.log(arr[0]);   // 直接打印
    arr[0] = 3;  // 还可以直接修改
    var arr = [1,2,3,4,5,9,11];
    for(var i = 0; i < arr.length; i++) {
        // console.log(arr[i]);// 把数组的每一位拿出来
        // arr[i] += 1; // 每位加1
    }

二 对象object

    var deng = {
        // 属性名:属性值,
        lastName: "Deng",
        age : 40,
        sex : undefined,
        wife :"xiaoliu",
        father :"daye",
        son:"xiaodeng",
        handsome:false
    }
     console.log(deng.father);
    deng.father = "daniang";
    console.log(deng.father);