前端开发工程师吧 关注:32贴子:149
  • 3回复贴,共1

理解函数apply和call方法

只看楼主收藏回复

每个函数都包含两个非继承而来的方法apply()和call(),apply方法与call方法区别仅仅是他们接收参数的方式不同。
在给函数传递参数的情况下,打算直接传入arguments对象或者数组,使用apply更方便。
否则选择call方法更合适。
在不传递参数的情况下,两个没有区别,使用哪个都无所谓。


IP属地:上海1楼2014-04-04 15:35回复
    这两个方法都是在特定作用域中调用函数。
    function sum(num1,num2){
    return num1+num2;
    }
    function callSum1(num1,num2){
    return sum.apply(this.arguments);
    }
    function callSum2(num1,num2){
    return sum.apply(this,[num1,num2]);
    }
    function callSum3(num1,num2){
    return sum.call(this,num1,num2);
    }
    alert(callSum1(10,10));//20


    IP属地:上海2楼2014-04-04 15:48
    回复
      2025-05-28 21:31:02
      广告
      alert(callSum2(10,10));//20
      alert(callSum3(10,10));//20


      IP属地:上海3楼2014-04-04 15:49
      回复
        使用call和apply方法来扩充函数作用域,对象与方法不需要有任何耦合关系。
        例如:
        window.color = "red";
        var o = { color:"blue" };
        function sayColor(){
        alert(this.color);
        }
        sayColor();//red
        sayColor.call(this);//"red"
        sayColor.call(window);//"red"
        sayColor.call(o);//"blue"


        IP属地:上海4楼2014-04-04 16:23
        回复