js-函数

js函数表示方法有两种:函数声明和表达式法

一、函数声明

变量和函数均匀预解析
console.log(a)      ====>    var a ;
var a = 10 ;                 console.log(a) //undefined
                             a= 10;

表示方法:

表示方法:
function 函数名(){
    
    
}

简单举例:
20+30 a+b
function add(){
    console.log(20+30) //50 
}

二、表达式法

add()
var add = function(){
   console.log(20+30) //50
}
其中add变量保存的是匿名函数在堆结构的地址
动态  参数对象  arguments 保存实参的值  数组的方式
var add = function(a) {  //形式参数

        var sum = 0;
         for(var i =0;i<arguments.length;i++){
             sum = sum+arguments[i];

         }

         //输出  返回值  return 
        return sum ; 

    }

    add(1,2,3,4,5); //实际参数
    // arguments = [1,2,3,4,5]

三、两种方法区别

函数声明  可以先调后定 不报错  有变量提升规则 
函数表达式法  必须先定义后调用

四、递归函数

思想:将大的问题分解成相似的子问题
方法:自己调用自己
但是不高效    循环---->调用函数
清晰   ###系列规律

递归函数表达方式:

(1)自定义一个有参有返回值的函数
(2)提取递归的出口

(3)前进段(规律),返回段(栈自发进行的)

出口表示方法:

if(){
    return ;
}

前进段

else{
    return 序列规律表达式;
}

下面我们通过递归函数来解决一些实际案例

案例一:猴子吃桃子

猴子每天吃比前一天的一半还多1个桃,第十天的时候剩一个桃子,问你第一天有多少

递归函数表达方式

function monky(day){
    if(day==10){
        return 1;
    }
    else{
        return (monky(day+1)+1)*2;
    }
}
console.log(monky(1));

也可以使用循环方法实现

案例二、求n的k次幂

 
//prompt() 获取用户输入   与python里面的input()作用一样
var n=parseInt(prompt('请输入底数:'));
var k=parseInt(prompt('请输入指数:'));
function cimi(n,k){
    if(k==1){
        return n;
    }
    else{
        return (cimi(n,k-1))*n;
    }
}
console.log(cimi(n,k));

同样也可以使用循试实现

案例三、写出斐波那契数列

function Fibonacci(a,b,n){
        console.log(a+'  ');
        if(n<1){
            return
        }
        else{
            return Fibonacci(b,a+b,n-1);
        }
    }
    console.log(Fibonacci(1,1,5));

可以使用三个变量交换来简单写出菲波那切数列

 var a = 1;
    var b = 1;
    var c = 0;
    for (var i = 1; i < 10; i++) {
        if(i<=2){
            document.write(1+',')
            continue
        }
        else{
        c = a + b;
        a = b;
        b = c;
        document.write(c+',')}

    }

写出的是十个菲波那切数

案例四、使用函数方法表示当前时间

此案例用不到递归函数,是Date()方法的练习

 //需求:2019-03-01 09:42:06
    /*参数:需要转换的时间毫秒数*/
    function formatDate(d) {
        var year = d.getFullYear();
        var month = d.getMonth();  //3(2)  0 -11
        var day = d.getDate(); //一个月中的某一天
        var hours = d.getHours();
        var min = d.getMinutes();
        var sec = d.getSeconds();
        // document.write(year,month,day,hours,min,sec);
        return [year+'-'+pingZero(month+1)+'-'+pingZero(day)+'   '
        +pingZero(hours)+':'+pingZero(min)+';'+pingZero(sec)]



    }
    function pingZero(t) {
        return t<10?'0'+t:t;


    }
    /* new Date() 实例化一个时间对象*/
    console.log(new Date())  //Fri Mar 01 2019 09:40:39
    document.write(formatDate(new Date()))
    var myP = document.getElementById('myP')
    // setInterval(formatDate(){
    //
    // })

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值