js函数--内部属性、方法、递归调用

函数的内部属性argument介绍:
1、该对象是函数的内部的对象,只能在函数体中使用,直接使用即可。
2、arguments是一个对象,用来代表实参数据。
(1)arguments对象有一个属性,length:代表了实参的个数。
(2)arguments对象中的实参数据,每个实参都对应一个序号,序号从0开始。依次递增。通过arguments【序号】访问。
(3)arguments对象能够实现js中的重载功能。
(4)一般情况下使用形参来接收实参数据,但是如果函数的参数是要求变化的,可使用arguments来代替形参接受实参数据。
(5)arguments对象还有一个属性callee.该属性也是一个对象,代表当前函数自身,主要作用是用来实现函数调用。

  // 打印最大值
   var maxNumber=function() {
        var max=arguments[0];
        for (var i=1;i<arguments.length;i++){
            if (max<arguments[i]){
                max=arguments[i];
            }
        }
        return max;
    }
    console.log(maxNumber(1,2,3,4));

函数对象的实例函数介绍:

toString():返回当前函数的字符串的表现形式
call():将当前函数借给其他对象使用。
语法:函数对象.call(借用者对象)
apply():作用与call相同。
bind():利用当前函数,帮其他函数生成新的函数。

 //自定义两个对象,将其中的一个对象的方法借给另外一个对象使用。
   var obj={
       name:'Frank',
       study:function() {
            console.log(this.name+'做笔记');
        }
    }
    var obj1={
       name:'Mike',
    }
    obj.study.call(obj1);
    obj.study();

函数递归调用:
1.概念:函数自身直接或间接地调用自己的过程。
使用递归解决问题的特点:
(1)问题可以分解为若干个子问题。
(2)子问题的解决方案和问题本身的解决方案一致。
(3)最终问题的解决要依赖于子问题的解决。
(4)最终必须有一个子问题不能再拆分子问题,必须可以直接解决。
2.递归调用的优缺点:
优点:代码实现相对简单。
缺点:消耗栈内存。效率相对较低。

   // 1.用递归调用求n的阶层
    function stratum(n) {
            if (n===1 || n===0)
                return 1;
            return n*stratum(n-1);
    }

    console.log(stratum(5));
    // 2.使用递归调用求1-n的累加和
    function sum(n) {
        if (n===1)
            return 1;
        return n+sum(n-1);
    }

    console.log(sum(2));
    //3.使用递归调用求斐波那契数列中第n个数的值
    function fibo(n) {
        if (n===1 || n===2)
            return 1;
        return fibo(n-1)+fibo(n-2);
    }
    for (var i = 1; i <=20 ; i++) {
        console.log(fibo(i)+';');
    }
    console.log(fibo(5));
使用argument.callee属性实现递归调用。解决安全隐患。
在代码严格模式下不允许使用。

如何启用js代码的严格模式
1.在全局启用,在script中添加“use strict”。
2、在函数内启用,在函数中添加“use strict”。
通常不建议使用argument.callee
“use strict”
 function fibo(n) {
        if (n===1 || n===2)
            return 1;
        return arguments.callee(n-1)+arguments.callee(n-2);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值