此代码之间有什么区别:
$('.percentage_field').change(function() {
update_percentage();
});
$('.inspect1').change(function(){
show_hide_targets();
});
这段代码:
$('.percentage_field').change(
update_percentage
);
$('.inspect1').change(
show_hide_targets
);
答案 0 :(得分:4)
当回调运行以响应事件时,函数内的this
将设置为作为事件目标的DOM元素。
在第一个示例中,匿名函数获取目标元素的this
,但this
未转发到内部函数调用。相反,内部函数使用this
according to how it is invoked运行。 (这里,它直接"原始"调用(即,不称为成员函数),因此它运行时this
等于window
,非脚本模式。)
在第二个示例中,函数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)
调用内部函数,{{3}}将原始this
转发给内部函数。