2010-10-31 83 views
23

each()方法包含了这样的语句:在jQuery的每种方法中,“callback.call(value,i,value)”是什么意思? jQuery中

callback.call(value, i, value) 

我不明白这是什么表态意味着完全相同。

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

该声明用于each()区块,但我的问题与该上下文无关。

从jQuery源:

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

回答

42

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

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

myFunc.call(document.body); 

在这个例子中,内thismyFunc将是document.body

call的第一个参数是要设置为this的值;后续参数作为正常参数传递给函数。所以,在你的榜样:

callback.call(value, i, value) 

这相当于

callback(i, value) 

只是,在回调中,this现在也设置为value

+0

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call – Abdull 2013-03-31 01:30:17

1

.each()方法调用你与元件(当前迭代“目标”)既作为上下文对象(的this的值)传递给它的回调和作为第二参数。

因此,在这些功能中的一个:

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

变量$this$elem是可互换的。

.call()的第一个参数是this应该绑定的值,如果不明确的话。 .call()的其余参数仅作为参数传递给函数。

1

这将调用callback方法与this设置为value(的第一个参数call),并用参数ivalue。 (其他参数为call