如何从内部访问函数对象?

yzn*_*pku 2 javascript function

假设我想在按钮上注册一次性事件监听器,我可以写:

var someButton;
var once = function() {
  console.log("clicked");
  someButton.removeEventListener("click", once);
};
someButton.addEventListener("click", once);
Run Code Online (Sandbox Code Playgroud)

如果我甚至不想给这个函数命名怎么办?喜欢:

var someButton;
someButton.addEventListener("click", function() {
  console.log("clicked");
  someButton.removeEventListener("click", /* what goes here? */);
});
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

你需要给它一个名字.您可以使用命名函数表达式.

someButton.addEventListener("click", function foo () {
  console.log("clicked");
  someButton.removeEventListener("click", foo);
});
Run Code Online (Sandbox Code Playgroud)

它将作为范围,因此只能从函数中访问它.


或者,在addEventListener中使用新的(非常新的,需要Chrome 55或Firefox 50,无需MSIE,Opera或编写本文时的稳定Safari支持)选项语法:

someButton.addEventListener("click", function () {
  console.log("clicked");
}, { once: true });
Run Code Online (Sandbox Code Playgroud)