JavaScript中什么是call()
?什么是apply()
?
call
:呼叫
apply
:应用
即call
相当于是呼叫另一个方法来执行
apply
是用另一个方法来执行,即把当前函数想要做的事让别的函数来做
举个例子:
function A (arg1, arg2) {
doThings...
}
function B (arg1, arg2) {
doThings...
}
var lcs = A.call(B, arg1, arg2);
var wy = A.apply(B, [arg1, arg2]);
相信大家已经看出一点点的差别了,对,就是call()
传参时,参数是分别传的,就相当于是B
方法呼叫A
方法,一句一句给A
说参数是什么,而apply()
传参时,参数是作为一个数组来传的,固这种方式相当于是一个数组为一个参数一次性给A
方法,就相当于是B
有活了,但是B
不想做,丢给A
来做,这时B
肯定不会一句一句手把手教,当然是一次性把参数丢给A
,让A
自己搞定。
当然在lcs
和wy
中,都是B
让A
做事,但是lcs
中是B
求A
做,在wy
中是B
强制让A
做。
call()
和apply()
的一些特殊使用
求数组中的最小和最大元素
var nums = [2, 3, 6, 1, 5, 9, 0]; // 数组
var min = Math.min.apply(Math, nums); // 求最小值 --> 0
var max = Math.max.apply(Math, nums); // 求最大值 --> 9
这里有趣的是,apply()
的第二个参数本就是一个数组,这里巧妙的将数组直接当做apply()
的第二个参数,让apply()
将数组解析为一个个的参数;第一个参数可以传Math
对象,也可以传null
,都可以获取到最大值和最小值,这样就可以取得一个数组中的最小和最大元素了。
ps: 这里重点需要理解的是
this
执行上下文的概念,也就是上面apply()
的第一个参数
暂时就这么多了,可能后续发现什么有趣的东西还会继续加的…