为什么在这种情况下使用'apply'功能?

时间:2011-11-23 17:13:31

标签: javascript

在Chrome的控制台中,

> $$
bound: function ()
{
    return document.querySelectorAll.apply(document, arguments)
}

为什么这段代码是这样的? 与

有什么不同
   return document.querySelectorAll(arguments)

2 个答案:

答案 0 :(得分:2)

arguments是一个类似数组的对象。

调用document.querySelectorAll(arguments)会将整个数组作为单个参数传递 调用querySelectorAll.apply(document, arguments)会将数组中的每个项目作为单独的参数传递。

在这种特殊情况下,它不是很有用,因为querySelectorAll只能接受一个参数。

答案 1 :(得分:2)

使用.apply()可确保提供给bound()的参数在提供给querySelectorAll()之前解包

没有这个,调用的效果:

bound('foo');

将致电

document.querySelectorAll(['foo']);