回调、匿名函数和上下文
Callbacks, anonymous functions and context
这个代码有什么区别:
$('.percentage_field').change(function() {
update_percentage();
});
$('.inspect1').change(function(){
show_hide_targets();
});
而这段代码:
$('.percentage_field').change(
update_percentage
);
$('.inspect1').change(
show_hide_targets
);
当回调响应事件时,函数内部的this
设置为作为事件目标的 DOM 元素。
在第一个示例中,匿名函数获取目标元素的this
,但该this
不会转发到内部函数调用。相反,内部函数根据其调用方式使用this
运行。(在这里,它是一个直接的"原始"调用(即,不作为成员函数调用),因此它在非脚本模式下以等于 window
的this
运行。
在第二个示例中,函数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
转发到内部函数。
相关文章:
- 将函数的上下文应用于javascript变量
- 是否可以在不更改上下文的情况下调用函数.apply
- 调用$.each()函数时上下文发生变化
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 访问函数对象的上下文属性|如何
- 构造函数函数中的自执行函数的OO上下文/范围
- 覆盖上下文.属性和函数
- 对象方法中函数中的上下文
- node.js中的箭头函数上下文
- extjs中事件处理程序函数中的THIS上下文
- 使用数组-apply()中的参数调用函数,但不使用上下文参数
- 函数调用上下文
- 如何使用子窗口上下文执行在父窗口中定义的函数
- 为什么Chrome无法(或can)在ES6的Arrow函数中找到上下文
- 如何创建一个原型函数,将另一个原型函数绑定为语法糖(并保持实例的上下文)
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 函数参数的 JavaScript 执行上下文
- 是否可以绑定javascript函数,使其本地上下文与“this”相同
- 上下文菜单项上下文函数未执行
- D3js:鼠标悬停对象上下文(函数指针)