Hola tunait y caricatos.
Otra opción podría ser utilizar la propiedad prototype de Function.
Para que te hagas una idea te envío un ejemplo.
Código:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
function count_down(){
// Evitamos que el usuario acelere la cuenta atrás
this.onclick = "new Function(return false)";
this.n--;
this.innerHTML = this.n;
// Si a terminado la cuenta atrás volvemos a permitir la cuenta atrás
if(this.n == 0){
this.innerHTML = this.n + " Haz click para iniciar la cuenta atrás otra vez.";
this.onclick = function(){
this.n = this.const_n + 1;
this.count_down();
}
}
if(this.n > 0) this.ctrl = window.setTimeout(""+this.id+".count_down()",2000);
}
// Enviamos el objeto y las variables
Function.prototype.args = function(obj,n){
// añadimos propiedades al objeto para almacenar las variables
obj.const_n = n;
obj.n = n + 1;
obj.ctrl;
// Asignamos la función al objeto
obj.count_down = this;
// Almacenamos el objeto en una variable, es necesario para el método setTimeout
eval("window."+obj.id+" = obj");
// Llamamos a la función
obj.count_down();
}
//-->
</script>
</head>
<body>
<div id="test" onclick="count_down.args(this,10)">10 Haz click para iniciar la cuenta atrás</div><br>
<div id="test2" >20 Haz click para iniciar la cuenta atrás</div><br>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("test2").onclick = function(){
count_down.args(this,20);
}
//-->
</script>
</body>
</html>
En este caso utilizo setTimeout, pero como habrás observado se puede prescindir de este método si no es necesario el retraso.
Saludos