js函数对象

一、函数声明 声明的方式有函数的提升

	//有变量提升
    function fun(a,b){
        console.log(a*b);
    }
    fun(5,6);   //30

二、函数表达式(匿名函数)

    fun(5,6);
    var fun = function(a,b){
        console.log(a + b);
    }
    //注:这样写会报下面这个错:


正确的写法:

    var fun = function(a,b){
        console.log(a + b);
    }
    fun(5,6);  //11

三、对象的方式

    //new 开辟的空间   Function是类型
    //let 函数名 = new Function("参数列表,多个参数 用逗号隔开","代码段");
    let fun = new Function("a","b","console.log(a+b)");
    fun(5,6);   //11

四、函数是功能完整的类

  • 既然定义一个函数就是创建一个函数对象。
  • 那么只要执行函数定义的代码,就会创建新的函数对象
    下面会议闭包,以闭包为例:
    function f1(){
      var n = 250;
      function f2(){
            n++;  
            console.log(n);
      }
      return f2;
    }
    // 从这 以上,相对于 new 一个对象
    
    var f21 = f1();//f21就是f2
    f21();//调用f2;
    f21();//调用f2;
    var f22= f1();//f22就是f2
    f22();//调用f2;
    f22();//调用f2;

在这里插入图片描述
虽然f21和f22的代码一样,但是,它们是两个不同的对象,即,每个的n值不一样。

所以函数等价于类?
 函数名作为参数和返回值:
 函数名能作为返回值,那么匿名函数也就可以作为返回值。

当我们知道函数是对象,函数名是对象名(变量名)时,函数名作为另外一个函数的参数和返回值就不难理解了。还记得当时讲数组的sort函数是,参数就是另外一个函数名。

五、函数的内置对象

自动产生,不需要用函数名来调用arguments 是是JavaScript里的一个内置对象。

  • arguments(他就是 一个数组)对象保存函数的所有参数, 虽然可以像数组一样的访问每个参数,但是,并不是标准的数组(没法使用push等函数);arguments对象不但保存着所有的参数,而且还有一个名叫callee的属性。Callee属性是个指针,指向了arguments对象所在的函数。
    function fun(){
        for(let i = 0; i < arguments.length;i++){
            console.log(arguments[i]);
        }
    }
    fun(1,3,5);//1    3     5

注:
1、arguments 是一个伪数组,它可以获取函数调用时 实参的数值;
2、rguments对象不但保存着所有的参数,而且还有一个名叫callee的属性。Callee属性是个指针,指向了arguments对象所在的函数,等价于 函数本身,在工作中,可以用在 递归处。

function fun(){
    // for(let i = 0; i < arguments.length;i++){
    //     console.log(arguments[i]);
    // }
    console.log(arguments.callee);
}
fun(1,3,5);

在这里插入图片描述
递归案例:

    //10 的阶乘
    function fun(n){
        let c;
        if(n == 1){ //如果 n 等等于1的话,c就等于1
            c = 1;  
        }else{
            c = n * fun(n - 1); //这块他就等价于   arguments.callee(n - 1);
        }

        return c;
    }
    console.log(fun(10));  //3628800

六、函数的属性和方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值