Funciones auto-optimizables en Javascript

Me tomo un rato para compartirles algo que aprendí hace ya un tiempo. Se trata de funciones auto-optimizables. Veamos un ejemplo:

getStyle : (function(that){
    var dummy = d.createElement('div');
    if(typeof dummy.currentStyle != 'undefined'){
       dummy = null;
       return function(style){
          return this.primitive.currentStyle[style];
       }
   }else{
       dummy = null;
       return function(style){
          return d.defaultView.getComputedStyle(this.primitive, null)[style];
       }
    }
 })(this);

Esa función es parte de un proyecto que estoy desarrollando en mis escasos tiempos libres. Se trata de una librería para el DOM que sea más fácil de usar y que no tome tanto tiempo como el DOM, pero ya les hablaré de eso en otra ocasión. Lo importante a notar en esa función es la forma en que se auto optimiza. En este caso estamos tratando de solo usar una función y eviar el chequeo cada vez que corra dicha función. Normalmente, lo que ocurriría sería lo siguiente:

getStyle : function(style, elem){
    if(typeof elem.currentStyle != 'undefined'){
          return this.primitive.currentStyle[style];
   }else{
          return document.defaultView.getComputedStyle(elem, null)[style];
   }
}

En este caso tenemos una función normal. Lo que ocurre es que cada que llamamos a dicha función, se hace un chequeo para ver si la propiedad currentStyle es indefinida. Esto es básicamente para saber como obtener el estilo de dicho elemento. El problema es que estamos haciendo el mismo chequeo una y otra vez, cuando en realidad, una vez que hemos definido que método usar, no hay necesidad de hacer dicho chequeo. La solución es usar una función auto-optimizable. Ya viste el ejemplo de una función auto-optimizable (la primer pieza de código en el post).

Lo que hacemos es crear una función auto-ejecutable, la cual regresa una función u otra dependiendo de que método es soportado por el navegador. La ventaja de este método es que solo hacemos el chequeo una vez al cargar el javascript. A partir de ahí, cada que se registra una llamada a getStyle se ejecuta directamente, uno de ambos métodos para detectar el estilo inicial de un elemento sin necesidad de hacer un chequeo primero. Hay muchas cosas interesantes que se pueden hacer con este tipo de funciones.

Bueno, por ahora eso es todo.