js-call(),apply()

先来个each()函数:

var each=function(array,fn){

  for(var index in array){

    //遍历array,fn这个函数未确定

  }

}

*假如我们需要定义一个形如each(array,fn)的函数,这个函数可以自动迭代array数级元素,而fn函数则负责对数组元素进行处理--此时需要在each函数中调用fn函数,但目前fn函数并未确定,因此无法采用直接调用的方式来调用fn函数,这时就需要用:

1 call()方法调用函数;

1.1 完善each,代码如下

var each=function(array,fn){

  for(var index in array){

      fn.call(null,index,array[index]);

  }

}

each([14,20,3],function(index,ele){

  document.write("第"+index+"个元素是:"+ele+"<br />");

});

1.2 语法解析:函数引用.call(调用者,参数1,参数2....);

2 以apply()方法调用函数与call()方法类似,区别在于:

>>通过call()调用函数时,必须在括号中详细地列出每个参数

>>通过apply()动态地调用参数时,可以在括号中以arguments来代表所有参数

代码如下:

2.1 var myfun=function(a,b){

  alert("a的值是:"+a+" b的值是:"+b);

}

myfun.call(window,12,23);

var example=function(num1,num2){

  myfun.apply(this.arguments);

}

example=(20,40);

myfun.apply(window,[12,23]);

2.2 语法解析:函数引用.apply(调用者,arguments);

对比上面代码:

当通过call()动态地调用方法时,需要为被调用方法逐个地传入参数;

当通过apply()动态地调用方法时,能以arguments一次性地传入多个参数

需要指出的是:arguments可代表调用当前函数时传入的所有参数,因此arguments相当于一个数组

原文地址:https://www.cnblogs.com/lxy061654/p/11166912.html