2013-01-31 58 views
4

是这段代码之间的区别:回调,匿名函数和上下文

$('.percentage_field').change(function() { 
    update_percentage(); 
}); 
$('.inspect1').change(function(){ 
    show_hide_targets(); 
}); 

这个代码和:

$('.percentage_field').change(
    update_percentage 
); 

$('.inspect1').change(
    show_hide_targets 
); 

回答

4

当回调响应事件运行,this里面的功能是设置为作为事件目标的DOM元素。

在你的第一个例子中,匿名函数获取目标元素的this,但this不会转发到内部函数调用。相反,内部函数以thisaccording to how it is invoked运行。 (在这里,这是一个直接的“原始”呼叫(即,不叫作为一个成员函数),所以它等于thiswindow运行,在非脚本模式)。

在第二个例子中,功能update_percentage并且show_hide_targets直接获得目标元素的this

考虑an example

function sayThis() { alert(this); } 
someElem.addEventListener("click", function() { sayThis() }); 
someElem.addEventListener("click", sayThis); 
someElem.addEventListener("click", function() { sayThis.call(this) }); 

第一会提醒window(或undefined在严格模式下);第二个会提醒监听者开火的元素。第三个侦听器使用匿名函数,但它使用.call(this)调用内部函数,该函数将原始this转发给内部函数。