5.5.4 函数内部属性

1:在函数内部,有2个特殊的对象:arguments跟this;
2:arguments是一个类数组对象,包含着传入函数中的所有参数;主要用途是保存函数参数,但是这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数;

  function factorial(num){
      if(num<=1){
        return 1
      }else{
        return num*factorial(num-1)
      }
    }
    console.log(factorial(5))   //120

    function factorial2(num){
      if(num<=1){
        return 1
      }else{
        return num*arguments.callee(num-1)
      }
    }
    console.log(factorial2(5))   //120

factorial这样做函数的执行跟函数名紧紧耦合在一起了,
factorial2消除了这种紧密耦合性,方便以后函数名的改动,无论函数名改成什么,都可以保证正常完成递归调用;

  function factorial(num){
      if(num<=1){
        return 1
      }else{
        return num*factorial(num-1)
      }
    }
    var truePactorial=factorial
    factorial=function(){
      return 0;
    }
    console.log(truePactorial(5))   //0
    console.log(factorial(5))   //0

    function factorial2(num){
      if(num<=1){
        return 1
      }else{
        return num*arguments.callee(num-1)
      }
    }
    var truePactorial2=factorial2
    factorial2=function(){
      return 0;
    }
    console.log(truePactorial2(5))   //120
    console.log(factorial2(5))   //0

3:this引用的函数据以执行的环境对象(网页的全局作用域中调用函数时,this对象引用的是window)

color='red'
    var o={ color:'blue' }
    function sayColor(){
      console.log(this.color)
    }
    sayColor()           //red,全局作用域中window.color
    o.sayColor=sayColor
    o.sayColor()          //blue.this引用的对象是o;o.color

函数的名字仅仅是一个包含指针的变量;因此,即使在不同的执行环境中,全局的sayColor() 跟o.sayColor() 指向的仍然是同一个函数;
4:函数对象的另一个对象属性:caller;这个属性保存着当前函数的函数的引用(即谁调用的这个函数);如果实在全局环境中调用当前函数,他的值是null

  function outer() {
      console.log(outer.caller) //null
      console.log(arguments.callee.caller) //null
      inner()
    }

    function inner() {
      console.log(inner.caller) //打印结果如下:
      console.log(arguments.callee.caller) //打印结果如下:
      // ƒ outer() {
      //   console.log(outer.caller) //null
      //   console.log(arguments.callee.caller) //null
      //   inner()
      // }
    }
    outer()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值