他们两个完全是风马牛不相及问这个还不如问caller和callee呢

解决方案 »

  1.   

    call和callee完全不一样。要说功能是一样的也是 call和apply ,或 caller和callee吧? 
      

  2.   

    call跟apply一样,都是改变当前函数上下文的,简单的说就是将函数中的this指向第一个参数,如:
    function a(){
          console.log(this)
    }
    var b = {}
    a.call(b)//这里打印出来的是b={},可以看出this指向了b
    a()//这里在控制台打印出来的是window,因为是定义的一个全局函数,直接调用等同于window.a()这2个函数唯一的局区别是在后面参数,
    call接受无数个参数,第二个后的参数会传进函数中,
    apply直接收2个参数,第二个参数为一个参数数组
    如:a.call(b,1,2,3,4,5)跟a.apply(b,[1,2,3,4,5])这2者是等价的。callee跟caller又是2个不同的概念
    callee是指向的是当前函数,调用方式:arguments.callee
    caller是指向的是调用函数的函数,调用方式:函数名.caller
    function a(){
        console.log(arguments.callee)//调用方式:arguments.callee
        console.log(a.caller)//调用方式:函数名.caller
    }
    function b(){
        a();
    }
    b()//这里会分别打印出a跟b这2个函数
    a()//这里会打印出a跟null,默认顶层函数的调用者为null