请查看http://jsbin.com/nubeb/1/edit
(function(){
var func = function(e){
console.log("mouse move");
document.removeEventListener("mousemove",func);
};
document.addEventListener("mousemove",func);
console.log("working");
}());
我想知道,是否可以从
替换'func'document.removeEventListener("mousemove",func);
到其他一些关键字,我想写下面的代码
(function(){
document.addEventListener("mousemove",function(e){
document.removeEventListener("mousemove",***);
});
}());
答案 0 :(得分:2)
我们有2个不同的选项,这里第一个使用arguments.callee
,它将在不久的将来被弃用,使用arguments.callee
我们可以访问正在执行的当前函数,所以你可以做这样的事情:
(function(){
document.addEventListener("mousemove",function mylistener(e){
document.removeEventListener("mousemove", arguments.callee);
});
}());
警告:第5版ECMAScript(ES5)禁止使用 arguments.callee()以严格模式。
阅读本文以获取更多信息:arguments.callee
如您所见,除了在不久的将来被弃用之外,您无法在arguments.callee
中使用strict mode
,这会给我们带来一些麻烦。
我们有一个新的选择,可以帮助我们不使用arguments.callee
。好的,我们假设我们有这样的功能:
var myfunc = function yourfunc(){
//yourfunc is accessible
};
//but here yourfunc is not accessible
在此代码中,我们只能在函数体中使用yourfunc
,但在该上下文之外,我们只有myfunc
。听起来我们在函数范围内有一个私有指针,可以访问它,而不是arguments.callee
。
所以这是新的替代方案,也可以在strict mode
中使用,因此在您的代码中,您可以这样做:
(function(){
document.addEventListener("mousemove",function mylistener(e){
document.removeEventListener("mousemove", mylistener);
});
}());
答案 1 :(得分:0)
工作代码http://jsbin.com/wopitiba/1/edit?html,js,console,output
(function(){
document.addEventListener("mousemove",function(e){
console.log("mouse move");
document.removeEventListener("mousemove",arguments.callee);
});
console.log("working");
}());