回调,匿名函数和上下文

时间:2013-01-31 13:57:56

标签: javascript jquery

此代码之间有什么区别:

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

这段代码:

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

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

1 个答案:

答案 0 :(得分:4)

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

在第一个示例中,匿名函数获取目标元素的this,但this 未转发到内部函数调用。相反,内部函数使用this according to how it is invoked运行。 (这里,它直接"原始"调用(即,不称为成员函数),因此它运行时this等于window,非脚本模式。)

在第二个示例中,函数update_percentageshow_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)调用内部函数,{{3}}将原始this转发给内部函数。