Skip to main content
Reinventing the wheel

use strict

Como si de un aviso de alguna hermética entidad se tratara, desde hace un par de años ha ido apareciendo en las entrañas de algunas librerías JavaScript y en ejemplos de código dispersos por la red la enigmática frase ‘use strict’.

¿Y qué demonios significa esta sentencia?

Más o menos indica al motor de interpretación de JavaScript de tu navegador favorito (y moderno, no me utilices Internet Explorer) que sea más restrictivo en la ejecución de scripts, un poco más seguro, y allá donde antes era permisivo y hacía la vista gorda ahora emita errores y regañe al programador.

Así por ejemplo, crear una variable global dentro del contexto de una función:

function testFunction()  
{  
    var localVar = true;  
    globalVar = 4;  
}  
testFunction();  

Con ‘use strict’ genera un error pues deja de estar permitido crear variables globales de forma implícita (tiene que haber sido declarada previamente con la palabra clave var):

function testFunction()  
{  
    ‘use strict’; // A partir de aquí modo estricto

    var localVar = true;  
    globalVar = 4; // Emite un ReferenceError  
}  
testFunction();  

El uso de este modo “estricto” viene promovido desde la 5ª edición de la especificación del lenguaje ECMAScript, que es algo así como un primo cercano que define como debe comportarse el lenguaje y como deben interpretarlo los motores o engines.

Un poco hartos los señores de Ecma International que les gritaran por la calle que JavaScript era un lenguaje malo (hasta Google les ha perdido el respeto y han creado Dart con la intención de sustituirlo), decidieron corregir el mal uso del lenguaje y evitar sus puntos débiles implementando un modo que forzara a programar mejor y/o con más cuidado, y que obligase a prestar mayor atención a los errores que por la flexibilidad de JavaScript se pasan por alto.

Por ventura ‘use strict’ no afecta a todo el código de un documento JavaScript: únicamente define como estricto el contexto donde va incluida la sentencia. Toda la programación de un archivo JS puede estar en modo estricto si ‘use strict’ se pone en el ámbito global, o sólo el contenido de una función o un closure si se define dentro de la misma. Esto permite a nuestro código feo y no estricto incluir librerías externas que sí estén en modo estricto.

// Código no estricto

(function(){  
    ‘use strict’;  
    // En esta función el modo estricto está activado  
})();

// Código no estricto  

Por supuesto que la utilización de ‘use strict’ en nuestro código no nos hará mejores programadores, ni es un hechizo que optimice nuestra aplicación: simplemente ayuda al desarrollador a ser más eficiente y le protege de consabidos errores al trabajar con JavaScript.

Restricciones impuestas por el ‘strict mode’

Estas son las restricciones que impone el modo estricto de JavaScript. Cabe recordar que no todos los navegadores las cumplen a rajatabla.

Para saber más