• 函数的内置属性


    注意 : arguments.caller , arguments.callee  这些在严格模式下会报错.
     
    1.  callee 的使用
     
    经典阶乘函数 :
      function factorial(num){
        if(num <= 1) return 1 ;
        else return num * factorial(num-1);
      }
     
    上面代码进行递归的调用时候,与函数名称耦合度太高
    导致在某种情况下调用时,就会得不到意料中的结果.
      var anotherFactorial = factorial ;
      factorial = function(){ return 0 ;}
      anotherFactorial(10); // display 0  
     
    使用函数的内置属性 arguments , 以及 callee 进行解耦合:
      function factorial(num){
        if(num<=1) return 1 ;
        else return num * arguments.callee(num-1);
      }
     
    这样 当函数名(即引用) 指向其他函数后 ,不会误执行变化后的函数 .结果就是正常结果了.
     
     
    2. caller 的使用(配合callee)
     
    function outer(){
      inner();
    }
    function inner(){
      // 这里使用了inner,耦合性高
      console.log(inner.caller);
     
      // 这里对上面输出进行 解耦. 输出的都一样:outer函数的源码.
      console.log(arguments.callee.caller);
    }
    outer();
     
     
    length
      函数的length表示 它想要接收的参数,比如sum(a,b){} 的length为2.
     
    call() 以及 apply()
     
    function say(word1){
      return `${word1} , ${this.word} !` ;
    }
     
    var obj = {
        word1 : "hello",
        word : "world"
    };
    // 以下三种方式 均可以 在this指代的对象上进行调用 sum()函数.
    say.call(obj, word1);// call 必须把所有参数用逗号分隔,罗列出来
    say.apply(obj, arguments); // apply 接受的是数组来传递参数
    say.apply(obj, [word1]);
     
    bind()
     
        window.color = 'red';
        var o = {color:"orange"};
     
        function getColor(){
            return this.color;
        }
     
        var getObjColor = getColor.bind(o);
        getObjColor(); // display 'orange'
        getColor(); // display 'red' ;
     
  • 相关阅读:
    AGC007题解
    博弈论学习笔记
    ZROI2019 提高十连测
    男人八题2019
    LOJ 2840「JOISC 2018 Day 4」糖
    CF671D Roads in Yusland
    网络流套路小结
    BZOJ 3729 GTY的游戏
    AGC036C GP 2
    BZOJ 5046 分糖果游戏
  • 原文地址:https://www.cnblogs.com/lmxxlm-123/p/11131847.html
Copyright © 2020-2023  润新知