我发现我可以使用这种技术在事件处理程序中保留一种“状态”,而不必涉及外部变量......
我发现这种技术在利用函数实际上是对象这一事实时非常聪明,但我担心我正在做一些可能会产生负面影响的事情。
示例...
var element = document.getElementById('button');
element.onclick = function funcName() {
// attaching properties to the internally named "funcName"
funcName.count = funcName.count || 0;
funcName.count++;
if (self.count === 3) {
// do something every third time
alert("Third time's the charm!");
//reset counter
funcName.count = 0;
}
};
答案 0 :(得分:5)
您可以使用闭包来代替这样做:
element.onclick = (function() {
var count = 0;
return function(ev) {
count++;
if (count === 3) {
alert("3");
count = 0;
}
};
})();
该设置涉及代码立即调用的匿名函数。该函数有一个局部变量“count”,它将在一系列事件处理程序调用中保留。
顺便说一下,这个:
var something = function dangerous() { ... };
是“危险的”,因为有些浏览器(猜测哪些,虽然Safari也有问题)当你在这样的函数表达式中包含一个名字时会做一些奇怪的事情。 Kangax wrote the issue up quite thoroughly.