上次说了定义函数的三种方式:https://blog.csdn.net/Searchin_R/article/details/82951962
这次说一下函数调用的三种方法。
JavaScript定义了三种调用函数的方法,分别是 直接调用函数、以call()方法调用函数以及以apply()方法调用函数。
下面介绍一下这三种方法。
1.直接调用函数
这个方法是我们最常用的,也是最普通的方式。它直接以函数附加的对象作为调用者,在函数后括号内传入参数来调用函数。
语法示例:
//对象a调用hello()函数
a.hello();
2.call()方法调用函数
上文中的直接调用函数的方法虽然很简单,但是调用方式不够灵活。有时候调用函数需要动态地传入一个函数引用,为了动态地调用函数,这个时候就需要用call()方法了。下面先看一段代码。
<script type="text/javascript">
var each=function(array,fn)
{
for(var index in array)
{
//以window为调用者来调用fn函数。
//index array[index]是传给fn函数的参数
fn.call(null,index,array[index]);
}
}
//调用each函数,第一个参数是数组,第二个参数是函数。
each([4,20,3],function(index,else)
{
document.write("第"+index+"个元素是:"+ele+"<br/>")
});
</script>
上面的代码定义了一个each(array,fn)函数,这个函数可以自动迭代处理array数组元素,而fn函数组负责对数组元素进行处理。但是显然,fn在each中被调用,但是它被调用的时候fn函数还没有确定,没有办法采用直接调用函数的方法,只好通过call()方法来调用fn啦。也就是说,当函数尚未确定的时候,无法直接调用,可以用call()方法调用。
3.apply()方法调用函数
apply()方法与call 方法类似,它们都可以动态调用函数,它们的区别如下:
通过call()调用函数的时候,需要在括号中详细地列出每个参数。
通过apply()动态地调用函数的时候,需要以数组的形式一次性传入所有调用参数。
apply()和call()的对应关系如下:
函数引用.call(调用者,参数一,参数二......)=函数引用.apply(调用者,[参数一,参数二......])
语法示例:
//动态调用fn函数,12,23为参数
fn.call(window,12,32);
fn.apply(window,[12,32]);
总结:函数的三种调用方式都很容易理解,最普通的直接调用函数方法虽然简易但是不够灵活,但需要动态调用函数或者对灵活性要求更高的时候,可以用call()或者apply()。