http://www.never-online.net/reference/Javascript/js-call-apply-caller-callee/
有人能帮忙解释一下吗?

解决方案 »

  1.   

    这个不叫递归
    你的意思是不是要问为什么方法被改写了,然后继续写的按按钮的时候继承了上次的值?
    答案如下// advanced apply demo
    function adApplyDemo(x) {   //原始的adApplyDemo方法
    return ("this is never-online, BlueDestiny '" + x + "' demo");
    }
    function handleAdApplyDemo(obj, fname, before) { //秘密在这里
      var oldFunc = obj[fname];     //将传递进来的方法转换成对象数组,这里是this[adApplyDemo],实际上
      //得到的是adApplyDemo 方法的指针
      obj[fname] = function() {   //动态的为adApplyDemo方法(指针)添加了方法
        return oldFunc.apply(this, before(arguments));  //将参数before(arguments)传递给获得的指针对象
    //也就是adApplyDemo一开始的属性. 这里将hello world 传递给了adApplyDemo,然后将更改属性以后
    //的方法作为一个function绑定回adApplyDemo函数,这时候他就已经是hello world参数的函数了
      };
    }
    function hellowordFunc(args) {
      args[0] = "hello " + args[0];
      return args;
    }
    function applyBefore() {
    alert(adApplyDemo("world"));
    }
    function applyAfter() {
    handleAdApplyDemo(this, "adApplyDemo", hellowordFunc);
    alert(adApplyDemo("world")); // Hello world!
    }
      

  2.   

    callee常用于对函数本身的匿名引用。