Lo primero que hace este código es ejecutar esta función (gracias al ()
al final del código que ha publicado):
function() {
// SET TIMER
var timer = 0;
// RETURN SET TIMEOUT FUNCTION
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
}
y almacenar el resultado en delay
. Cuando se ejecuta, esta función crea un cierre con la variable local timer
que se corta como un contador local. La función devuelve la función interna:
function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
}
Dado que es en el cierre, esta función interna tiene acceso a la variable timer
. Ningún otro código externo puede acceder al timer
. Este método se usa para permitir que varios temporizadores se ejecuten a la vez sin tener que preocuparse por las variables múltiples timer
.
Imagínelo así: delay
ahora contiene una función (function(callback, ms) {...
) que tiene acceso a una variable local, timer
. La variable timer
es invisible en lo que respecta a cualquier código externo. Solo la función que delay
contiene puede acceder a ella.
A continuación, invoque esa función interna llamando al delay(callback, timeout)
.
Sugiero que lo pregunte en http://codereview.stackexchange.com/ – Gerep
Eche un vistazo a ['clearTimeout'] (https://developer.mozilla.org/en/DOM/window.clearTimeout) y [ 'setTimeout'] (https://developer.mozilla.org/en/DOM/window.setTimeout). –
Es posible que también desee ver la definición de función anónima. Aquí hay un [enlace] (http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work). – DiamRem