Function类型

将函数作为值传递给另一个函数

   function sum(num) {
       return num+10;
   }
     function mm(sum,num) {
          return sum(num);
      }
      console.log(mm(sum,10));

函数内部属性

arguments

一个类数组的对象,但是不是一个数组
arguments的callee属性:这个属性是一个指针,指向的是拥有这个argumnets对象的函数

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

this

this引用的是函数据以执行操作的对象。或者说函数当前执行的那个作用域
window对象和this对象

      var color="sasa";
  console.log(this.color);
  console.log(window.color);

函数的prototype属性

每一个函数都有prototype,每一个prototype都有这两个方法
prototype:保存所有实例方法的真正所在。这个属性有以下两个方法:
1、apply 第一个参数是作用域 第二个是数组(或者arguments)
2、call 第一个参数是作用域,后边的参数是一个一个传递和数组不同
以上两个方法的的第一个功能:
是冒充其他函数执行
上面两个方法都实现的是冒充其他函数执行的功能

    function box(num1,num2) {
        return num1+num2;
    }
      function sum(num1,num2) {
          return box.apply(this,[num1,num2]);
      }
      console.log(sum(10,20))   //30

第二种

    function box(num1,num2) {
        return num1+num2;
    }
      function sum(num1,num2) {
      //而不是box.prototype.apply
          return box.apply(this,arguments);  
      }
      console.log(sum(10,20))   //30

2、第二个功能
apply和call经常使用的地方是扩展函数赖以运行的作用域

      var color="绿色的";
   var box={
       color:"红色的"
   }
      function sayColor() {
          console.log(this.color);
      }
  sayColor.call(this);    //绿色的
  sayColor.call(box);//红色的

第一句冒充了window的运行环境
第二句冒充了box的运行环境。
使用call和apply来扩充作用域的最大好处是,就是对象不与方法发生任何耦合的关系,为程序的维护提供了方便性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值