4

这段代码有什么区别:

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

而这段代码:

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

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

1 回答 1

4

当回调运行以响应事件时,this函数内部设置为作为事件目标的 DOM 元素。

在您的第一个示例中,匿名函数获取this目标元素的 ,但不会转发到内部函数this调用。相反,内部函数根据调用的方式使用 a 运行。(这里,它是一个直接的“原始”调用(即,不作为成员函数调用),所以它在非脚本模式下以equal to运行。)this thiswindow

在您的第二个示例中,函数update_percentage并直接show_hide_targets获取this目标元素的。

考虑一个例子

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给内部函数。

于 2013-01-31T14:01:53.360 回答