在jQuery的每个方法中,“callback.call(value,i,value)”是什么意思?

时间:2010-10-31 21:59:58

标签: javascript jquery functional-programming

jQuery中的

each()方法包含这样的语句:

callback.call( value, i, value ) 

我无法理解这句话到底意味着什么。

我知道callbackcall是什么意思,但我无法得到函数调用的参数:(value,i,value)。这是什么意思?

该语句用于each()的for块,但我的问题与该上下文无关。

来自jQuery源的

for ( var value = object[0];
      i < length &&
      callback.call( value, i, value ) // <=== LOOK!
      !== false;
      value = object[++i] ) {}

3 个答案:

答案 0 :(得分:46)

Javascript中的所有函数都存在call方法。它允许您调用该函数,并在此过程中设置该函数中this的值。

function myFunc() {
    console.log(this);
}

myFunc.call(document.body);

在此示例中,this中的myFunc将为document.body

call的第一个参数是要设置为this的值;后续参数作为普通参数传递给函数。所以,在你的例子中:

callback.call( value, i, value )

这相当于

callback(i, value)

除了在回调中,this现在也设置为value

答案 1 :(得分:1)

.each()方法使用元素(当前迭代“target”)作为上下文对象(this的值)和第二个参数调用您传递的回调。

因此,在其中一个职能中:

$('.foo').each(function(i, elem) {
  var $this = $(this), $elem = $(elem);

变量$this$elem可以互换。

.call()的第一个参数是this应绑定的值,如果不清楚的话。 .call()的其余参数只是作为函数的普通参数传递。

答案 2 :(得分:1)

这会调用callback方法,this设置为valuecall的第一个参数),参数i和{{1} }。 (value)的其他参数