Firefox 4 se viste con la nueva camiseta

abril 21st, 2011 by Mozilla Hispano with No Comments »

Hace algunos días atras se publicó la camiseta ganadora de firefox 4 en la página de Mozilla Creative Collective. La comunidad de entusiastas creativos desarrollaron un concurso hace  meses atrás para dar lugar a un diseño único que llevarán en su pecho a uno de los navegadores mas importantes del mundo. El desafio termino este 28 de marzo de 2011 con 1832 diseños presentados al reto firefox 4 t-shirt design challenge.

El ganador se llama Koen Hendrix y es de Liverpool, Inglaterra.

Koen Hendrix finalizó con 314 votos, mientras que James Bearne recibio 223 votos, quedando en el segundo lugar. El concurso reunió a miles de personas para crear la camiseta. Si eres curioso, puedes ver todas las entradas de diseños que hubieron en este reto: diseños finalistas.

¿Qué significa todo esto para Mozilla?

Mozilla es una organizacion sin fines de lucro, basada en la organización comunitaria, que se ha centrado siempre en las contribuciones de la comunidad en todo el mundo para ayudar con todo, desde el desarrollo hasta la localización de la comercialización (y mucho más). Estos retos es una manera de involucrar a la comunidad de diseño visual para ayudar a avanzar en la misión de mantener la web abierta y libre. ¡Cada diseño tiene el potencial hacer realmente una diferencia!

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Fiesta Firefox 4 Madrid

abril 4th, 2011 by Mozilla Hispano with 1 Comment »

Fiesta Firefox 4 Madrid

“Enhorabuena a todos #fx4”. Este era el mensaje que se distribuía por Twitter el 22 de marzo de 2011, día en el que Mozilla liberaba la nueva versión de su navegador, Firefox 4, y hacía oficial su lanzamiento. Una semana después, Firefox 4 para dispositivos móviles vió también la luz y el mensaje siguió difundiéndose entre todos los miembros de la Comunidad Mozilla Hispano.

Han sido unos meses muy duros. Muchas horas de traducción y puesta en marcha de webs de Mozilla en español. Ha merecido la pena y ahora llega el momento de celebrarlo y brindar por todo este trabajo y esfuerzo.

Como siempre acostumbramos a hacer en la Comunidad, queremos que forméis parte de todo lo que hacemos. Por eso, os invitamos a celebrar con nosotros el lanzamiento de Firefox 4 en Madrid. Hemos montado un evento en el Hotel Tryp Ambassador el próximo jueves 14 de abril al que no podéis faltar. Una fiesta para todos los que celebráis con nosotros el lanzamiento y para los que aún no nos conocéis. Todo el mundo es bienvenido. Estará con nosotros Pascal Chevrel, el secretario general de Mozilla Europa. ¡Bien!

Una gran oportunidad para que os contemos las novedades de Firefox 4 y para que podáis conocer a todos los miembros activos que trabajamos en la Comunidad desde España y podáis preguntarnos cualquier cosa.

Podréis comentar en directo la fiesta en Twitter, a través del hashtag #fx4madrid y ver vuestros comentarios en la gran pantalla que hemos preparado. ¡Ah! Se nos olvidaba comentar una última sorpresa :) Vivíreis algo así como un simpático viaje en el tiempo …

Podéis apuntaros hasta el día 13 de abril en esta página eventos.mozilla-hispano.org/fx4madrid.

¡Os esperamos!

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Firefox 4 para móviles. Llévate la web contigo.

marzo 29th, 2011 by Mozilla Hispano with No Comments »

Sólo una semana después de compartir con vosotros el lanzamiento de Firefox 4, hoy volvemos con otra gran noticia. Mozilla ha publicado hoy la versión final de Firefox 4 para móviles, un navegador con el que llevarte la Web a donde tú quieras.

Quienes ya habéis estado utilizando la versión candidata conocéis bien todas las genialidades que tiene Firefox 4 para móviles. Para los que aún no lo habéis probado ¡este es vuestro momento!

Características

Tiene una interfaz limpia desde la que disfrutar plenamente de tu navegación y acceder a tus pestañas abiertas sólo deslizando un dedo. Podrás alternar entre distintas páginas y abrir otras nuevas. También… ¿cómo no? la Pantalla alucinante. ¿Qué te vamos a contar de ella? ¡Su nombre lo dice todo! Listas inteligentes, marcadores, historial… e incluso pestañas abiertas en otros equipos… ¡Es tan inteligente que conoce tus hábitos!

¿Harto de escribir URLs largas e imposibles, de tener que introducir tu contraseña y nombre de usuario cada vez que visitas la misma página? ¡Con Sync podrás llevarte la Web contigo! Sincroniza todos tus marcadores, contraseñas, datos de formularios y hasta pestañas en todos tus dispositivos. ¡Como lo oyes! Tu Firefox en tu móvil. Y todo esto con la seguridad, la privacidad y el respeto a todos tus datos personales que ya conoces por tu navegador de escritorio.

Además, prepárate para navegar al límite de la velocidad porque Firefox 4 para móviles tiene un rendimiento… ¡increíble!

¿Quieres ver esto y mucho más en acción? Mira este vídeo:

Complementos

Como has podido ver, Firefox 4 para móviles es igual de personalizable que tu versión de escritorio. Hay unos cuantos complementos que queremos que conozcas porque te van a venir muy bien. Son Personas, Phony, la barra de Twitter, el botón Inicio y un complemento especial, Tapsure, para que le pongas ritmo a tus contraseñas y no tengas que recordar nada más.

¡Te gustarán! Mira cómo funcionan en este vídeo:

Diviértete con Chispa

¡Entra en Spark!

Y ahora, como colofón, los fuegos artificiales. Queremos obsequiaros con la última creación de Mozilla. Una aplicación desarrollada exclusivamente para Android y Maemo [ver lista de dispositivos] con la que festejar el lanzamiento oficial de Firefox 4 para móviles. La aplicación se llama Chispa (Spark) y os invita a todos a participar y propagar entre vuestros amigos la chispa de Firefox 4. Entra desde tu teléfono y juega, obtén insignias, compite y ayuda a Mozilla a conseguir una Web mejor. Esto es… Chispa.

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Firefox 4 ya está aquí

marzo 22nd, 2011 by Mozilla Hispano with No Comments »

Mozilla publica Firefox 4 y brinda una experiencia de navegación rápida, elegante y personalizable a más de 400 millones de usuarios en todo el mundo. Hemos creado una página muy especial sobre Firefox 4, con demos, asistencia, enlaces y demás cosas interesantes que trae esta nueva versión, ¡échala un vistazo!

Mozilla, una organización global sin ánimo de lucro dedicada a mejorar la web, está orgullosa de publicar Firefox 4, la nueva versión del popular navegador web, gratuito y de código abierto. Firefox le da a los usuarios el control de su experiencia web, brindando una interfaz de usuario amigable, nuevas características muy divertidas, un aumento de velocidad y soporte de nuevas y modernas tecnologías web.

Firefox 4 está disponible para descargar en Windows, Mac OS X y Linux en más de 80 idiomas. Además, Firefox 4 también estará disponible en breve para los dispositivos Android y Maemo.

Firefox 4 es la versión más rápida hasta el momento. Con una velocidad increíble y mejoras en el rendimiento, Firefox es de dos a seis veces más rápido que las versiones anteriores. Grandes mejoras al motor de JavaScript hace que desde los tiempos de inicio de la aplicación hasta la velocidad de carga de páginas y el rendimiento de JavaScript sean maravillosamente rápidos en Firefox.

La última versión de Firefox introduce un diseño más estilizado que permite que el contenido Web esté en el lugar central. Con funcionalidades como las Pestañas de aplicación y Panorama, Firefox hace más fácil y más eficiente navegar la Web. Firefox brinda funcionalidades de seguridad y privacidad innovadoras en la industria, como No dejar rastro y la política de Seguridad del contenido para darle a los usuarios control sobre la información personal y protejerlos mientras están en línea.

Firefox Sync permite a los usuarios acceder al historial de la barra alucinante, a los marcadores, a las pestañas abiertas y a las contraseñas a través de los equipos de escritorio y los dispositivos móviles. Firefox también ofrece cientos de miles de complementos, extensiones y Personas y un nuevo administrador de complementos para facilitar el uso y ayudar a descubrir complementos para que los usuarios personalicen su experiencia en la Web.

Firefox soporta tecnologías Web modernas, incluyendo HTML5. Estas tecnologías son la base para construir sitios web sorprendentes y aplicaciones Web. Ve a la Web O’ Wonder y mira las increíbles experiencias web que los desarrolladores pueden crear.

Esfuerzo y comunidad

Largo y tendido hemos hablado sobre Firefox en Mozilla Hispano, haciendo un especial sobre su tecnología y lo nuevo que supone: CSS3 y HTML5 mejorado, extensiones fáciles, Firefox Sync, mejora en la interfaz, complementos, velocidad, Panorama…

Firefox 4 es uno de los mayores esfuerzos que ha hecho Mozilla y su comunidad en su larga historia (más de 10 años), ya que, de nuevo, hay una gran e increíble competencia en la web, con Google Chrome, Safari, Opera y, en menor medida, Internet Explorer. Los únicos beneficiados de toda esta competitividad somos todos, los usuarios de la web, una plataforma cada vez más potente y con recursos, en las que la imaginación prima sobre cosas establecidas.

Desde Mozilla Hispano creemos que esta noticia no debería ser una noticia más, si no una celebración para la web, para que todos los usuarios puedan navegar con la última tecnología (recordemos que funciona en Windows 2000 y Windows XP, aún casi con el 50% de los SSOO en la red) y aprovechen al máximo la potencia de la web en este año 2011.

Para celebrarlo y ver más información, visita nuestra página de inicio de Firefox 4. No es mi web, ni tu web, ni la web de determinada empresa. La web es de todos, celebrémoslo.

Novedades en Firefox 4

Firefox más rápido que nunca

Rendimiento: Firefox es hasta seis veces más rápido que las versiones anteriores. Con un tiempo de inicio mejorado y mayor velocidad para cargar páginas Web, rendimiento rápido de aplicaciones Web y gráficos con aceleración por hardware, Firefox está optimizado para sitios web interactivos y complejos.

Interfaz depurada

Pestañas de aplicación: le da un lugar permanente a los sitios web que visitas frecuentemente, como el correo electrónico en la Web, Twitter, Pandora o Flickr.

Ir a la pestaña: puedes encontrar fácilmente las pestañas que tienes abiertas e ir a ellas desde la Barra alucinante sin abrir pestañas duplicadas.

Panorama: arrastra y mueve las pestañas dentro de grupos manejables para ahorrar tiempo mientras navegas entre muchas pestañas abiertas.

Sincronización privada y segura

Firefox Sync: accede al historial de la Barra alucinante, los marcadores, las pestañas abiertas, las contraseñas y la información de formularios entre muchos equipos de escritorio y dispositivos móviles.

Más personalizable

Nuevo administrador de complementos: descubre fácilmente e instala más de 200.000 complementos para personalizar las características, las funciones y el diseño de Firefox.

Privado y seguro

No dejar rastro: Firefox está liderando la Web hacia una función estándar llamada No me rastreen que permite a los usuarios optar por evitar el rastreo del comportamiento que usan las publicidades.

Firefox pone la privacidad en primer lugar, arreglando problemas en estándares Web que previenen que otros accedan a tu historial de navegación.

HTTP Strict Transport Security (HSTS): establece automáticamente conexiones seguras para detener el riesgo potencial de ataques de «hombre en el medio» y mantener los datos sensibles a salvo de la intercepción durante el proceso de ingreso a un sitio web.

Content Security Policy (CSP): previene ataques de scripts entre servidores al permitir que los sitios web digan explícitamente a los navegadores qué contenido es legítimo.

Herramientas de vanguardia para desarrolladores Web

El motor de JavaScript incorpora el nuevo compilador JIT JägerMonkey, además de mejoras a los interpretadores ya existentes TraceMonkey y SpiderMonkey para acelerar la velocidad de carga de páginas y mejorar el rendimiento de las aplicaciones Web y los juegos.

El soporte de HTML5 en Firefox incluye la aceleración por hardware, el video en alta definición (WebM), los gráficos 3D, el guardado de información estando desconectado, las tipografías profesionales, las interfases touchscreen y la API de audio de Mozilla que ayuda a crear experiencias visuales para el sonido y mucho más.

Firefox 4 mejora las herramientas ya existentes como CSS, Canvas y SVG para permitir a los desarrolladores crear apasionantes páginas Web.

Firefox provee una navegación ininterrumpida cuando hay un cuelgue de los plugins de Adobe Flash, Apple Quicktime o Microsoft Silverlight. Si uno de estos plugins se cuelga o se congela, no afectará al resto de Firefox. Simplemente recarga la página para reiniciar el plugin.

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Disponible versión candidata de Firefox 4

marzo 9th, 2011 by Mozilla Hispano with No Comments »

El fin de la espera de Firefox 4 está llegando. Firefox 4 ha dejado de ser versión beta para convertirse en versión candidata (Release Candidate), eso quiere decir que, si no se encuentra ningún fallo importante, esta versión puede ser la misma que la versión final.

Por si no lo sabes, hemos realizado una serie de artículos especiales para este lanzamiento de Firefox 4, que puedes consultar para ver todo lo que se ha cambiado desde la versión 3.6 y ver tanto el trabajo interno, como de apariencia.

Descargar Firefox 4 RC1

De forma simultánea, se produce la publicación de “Demo Studio” un lugar donde los desarrolladores web pueden aprender y mostrar las nuevas maravillas tecnológicaque tecnologías como HTML5, CSS3 o JavaScript nos facilitan y que Firefox 4 sabe aprovechar a la perfección.

Firefox 4, cada vez más cerca… anímate a probarlo.

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Mozilla Labs libera la primera versión del Proyecto de Aplicaciones Web

marzo 4th, 2011 by Mozilla Hispano with No Comments »

Hace apenas unas horas les contábamos del lanzamiento de la Web maravillosa (…mente abierta) de Mozilla, un sitio que sirve como antesala del inminente lanzamiento de la versión final de Firefox 4. Ahora, los chicos de Mozilla Labs nos traen otro proyecto, que también viene acompañado de todos los estándares que Mozilla respeta y que están muy presentes en Firefox 4.

En los tiempos que corren, cada vez es más común que encontremos tiendas de aplicaciones para todas las cosas. De hecho, hoy en día cada dispositivo móvil tiene su  tienda de aplicaciones, haciendo que cada aparato cree su propio “nicho”. Desde Mozilla Labs pensaron, ¿porque no crear una tienda de aplicaciones, que corra en la Web y que además, funcione en cualquier navegador moderno?

Y para responder a esa pregunta surge el Proyecto de Aplicaciones Web. ¿De que se trata? Nada más y nada menos que del puntapié inicial para crear tiendas de aplicaciones webs que funcionen en cualquier navegador y plataforma, ya sea de escritorio o móvil. Para eso, la gente de Mozilla Labs, creó y publicó toda la documentación necesaria para que estos ecosistemas puedan ser generados por cualquier persona. Desde la información necesaria para crear tu propia tienda[en], hasta un manifiesto[en] que explica todo lo que una aplicación necesita para interactuar con el navegador web.

Por ahora, han liberado una versión de prueba, para que vayamos viendo de que se trata. Para eso, debemos instalar el addon, ya sea para Firefox o para Chrome, y comenzar a cargar algunas de las aplicaciones que hoy están disponibles. El proyecto recién comienza, hay muchas ideas dando vuelta, así que seguramente haya actualizaciones seguido. ¡No duden en entrar seguido, chequear que hay y comentarnos que les parece!

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

La web maravillosa (…mente abierta) de Mozilla

marzo 3rd, 2011 by Mozilla Hispano with No Comments »

Anticipando el lanzamiento de Firefox 4, Mozilla presentó una galería de ejemplos que utilizan las nuevas tecnologías disponibles a partir de HTML5, CSS3 y WebGL para demostrar qué es posible hacer en la Web. Los ejemplos están divididos por categorías y se irán sumando más con el paso de los días.

La galería de demos de Mozilla

En estos momentos se pueden ver:

Remixing reality que mezcla el uso de video sin necesidad de plugins con realidad aumentada

Un ejemplo de realidad aumentada en la web

London project donde podremos ver en acción muchos efectos que antes solo eran posibles con plugins externos

Animaciones y videos sin la necesidad de plugins

HTML5 dashboard donde podemos conocer de qué tratan las nuevas características de estas tecnología, como por ejemplo el uso de tipografías incrustadas, transiciones con CSS, sombras, etc.

Un resumen con ejemplos en vivo de las nuevas capacidades de la Web

Como decíamos antes, no olvides visitar la galería a menudo, ya que se seguirán incorporando otras demostraciones.

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

[Especial Fx4] Nuevas características para desarrolladores

febrero 23rd, 2011 by Mozilla Hispano with No Comments »

(En primer lugar, las últimas semanas han sido duras con exámenes y con vacaciones y además preparando documentación, webs y demás para la salida de Firefox 4, por eso no ha habido noticias para el especial. Pero quedan pocas noticias hasta ver Firefox 4 ;) )

Probablemente Firefox 4 sea el mayor y mejor salto en la historia del desarrollo de Firefox para los programadores web. Nuevas características imporantes, como mayor soporte para HTML5, facilidad de embeber en páginas imágenes SVG de una forma mucho más fácil, y varias herramientas integradas en Firefox hacen que desarrollar páginas web increíbles sea más alucinante que nunca.

HTML5

En primer lugar, recordar que HTML5 es un estándar cambiante, no está totalmente estandarizado y estable, por lo que puede que haya cosas que hoy funcionen con una sintáxis que dejará de funcionar en meses porque se ha cambiado el estándar.

Para los que no lo sepan, HTML es el lenguaje con la que están hechas todas las páginas web que vemos. Si tienes más curiosidad, pulsa Control+U o Cmd+U (si estás en Mac) para ver de lo que hablo. Ese lenguaje de etiquetas ha evolucionado muchísimo en los últimos años gracias al auge de la web y las nuevas prestaciones de equipos y navegadores.

HTML5 es, sin duda alguna, el mayor y mejor cambio a la web jamás visto desde su creación, ya que implementa diferentes características que lo hacen realmente increíble junto a otras tecnologías complementarias, pero que se las da en llamar a todas ellas HTML5: geolocalización, canvas, SVG en línea, formularios con validación, WebGL, WebWorkers, recursos offline y bases de datos

Por ejemplo, los formularios HTML5 es un gran progreso en cuanto a los formularios usados en muchísimas páginas web, debido a que ahora se autovalidan si se programan correctamente (indicando qué es lo que queremos que haya dentro, por ejemplo correos, teléfonos…), y devuelven valores de error si no superan dicha validación.

SVG, las imágenes vectoriales, ahora pueden ser incrustadas fácilmente en el código fuente de las páginas, sin añadir namespaces raros o escribiendo etiquetas sin sentido, simplemente se añaden como si fuera una imagen más.

La geolocalización y canvas están disponibles desde varias versiones atrás de Firefox, pero ahora el rendimiento ha mejorado mucho, gracias sobre todo a la aceleración por hardware de las diferentes capas (layers) con las que se renderizan ahora las páginas web.

CSS3

CSS3 es la nueva versión de estilos para las páginas web. Tras el CSS original y las siguiente versiones como 2 y 2.1, la nueva versión 3 trae nuevas características como las transformaciones y transiciones, que permitirán crear “animaciones” con imágenes o elemtentos de una forma simple y rápida, sin usar imágenes en movimiento (mayormente GIF o APNG).

Vídeo y audio

El audio en Firefox 4 soporta lo mismo que en las versiones anteriores, y el códec usado es WAV (formato RAW) y Vorbis, mientras que en vídeo hablamos de grandes mejoras y cambios.

Mientras que en Firefox 3.5 y 3.6 se podía usar el formato OGG/Theora, que era el códec de vídeo libre de patentes mejor en ese momento, en Firefox 4 se va a utilizar también el formato WebM, totalmente libre de patentes, y que tiene un rendimiento similar al omnipresente privativo H264.

Este nuevo códec tiene un amplio soporte en páginas muy usadas, como en YouTube, y además, el códec va a ser el único usado en otros navegadores que quieren una web libre y estándar, como Google Chrome y Ópera.

Estas nuevas características están disponibles en Firefox en cuanto salga la versión 4, pero ya están disponibles en otros navegadores (Ópera, Safari y Chrome básicamente), por lo que pueden ser usadas sin probelmas para mejorar la web y crear páginas increíbles que eran imposibles incluso de pensar hace sólo meses.

Juega, crea y diviértete. El futuro está cerca.

del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com email Meneame Twitter

Artículos relacionados:

Firefox 4.0 soportará ECMAScript 5 en modo estricto (II)

febrero 3rd, 2011 by Mozilla Hispano with No Comments »

Una de las funcionalidades que se resaltan en la implementación de ECMAScript 5 en modo estricto, como se mencionaba en el artículo Firefox 4 admitirá ECMAScript 5 en modo estricto es la transformación de fallos que se pasaban por alto en JavaScript por errores que lanzan excepciones.

Se mencionaba en primer lugar, que el modo estricto no permitirá la creación de variables globales de forma accidental puesto que en JavaScript normal, escribir mal una variable simplemente crea una propiedad en el objeto global. Este tipo de fallo se transformará en error y se lanzará una excepción si se esta trabajando en modo estricto:

“use strict”;

mistypedVaraible = 17; // lanza un ReferenceError

Continuando con los tipos de fallos, tenemos un segundo caso, se presenta cuando el modo estricto realiza asignaciones las cuales podrían de otra forma fallar silenciosamente lanzando una excepción. Por ejemplo, NaN no es una variables global de escritura. En el código normal una asignación a NaN no haría nada; el desarrollador no recibe notificación de fallos.  En modo estricto una asignación a NaN lanza una excepción. Alguna asignación que silenciosamente falle en código normal lanzará una excepción si se encontrara escrita en modo estricto:

“use strict”;
NaN
= 42; // lanza un TypeError
var obj = { get x() { return 17; } };
obj.
x = 5; // lanza un TypeError
var fixed = {};
Object.
preventExtensions(fixed);
fixed.
newProp = “ohai”; // lanza un TypeError

Tercero, si tratas de eliminar propiedades no eliminables, el modo estrícto lanza un error (pero antes de intentarlo podría simplemente no tener efecto):

“use strict”;
delete Object.prototype; // lanza un TypeError

Cuarto, el modo estricto requiere que todas la propiedades nombradas en un objeto literal sean únicas. En el código normal se podría duplicar los nombres de propiedades, con el último valor determinado para la propiedad. Pero desde que el último no modifique nada, la duplicación no es más que un vector de errores, si el código modifica el valor de la propiedad por otro que cambie el valor de la última instancia, duplicar nombres de propiedades es un error de sintaxis en el modo estricto:

“use strict”;
var o = { p: 1, p: 2 }; // !!! error de sintaxis

Quinto, el modo estricto requiere que los nombres de los argumentos de las funciones sean únicos.  En el código normal el último argumento duplicado esconde los últimos argumentos con el mismo nombre. Estos argumentos están disponibles por medio de arguments[i], por lo tanto no son completamente inaccesibles.  Sin embargo, esconder errores tiene poco sentido y es probablemente algo indeseable (esto podría , por ejemplo, ocultar un error), pero en el modo estricto duplicar nombres de argumentos es un error de sintaxis:

function sum(a, a, c) // !!!  error de sintaxis
{
“use strict”;
return a + b + c; // Error si este código corre
}

Sexto, el modo estricto prohíbe la sintaxis octal. La sintaxis octal no hace parte de ECMAScript, pero es soportada por todos los navegadores poniendo como prefijo un cero al número octal: 0644 === 420 and “�45″ === “%”.  Los desarrolladores novatos algunas veces creen que adicionar un cero como prefijo no tiene significado semántico, entonces lo utilizan para alinear los números en su código fuente. — Pero esto cambia el significado del número! La sintaxis octal raramente es usada y puede ser erróneamente utilizada, en este caso el modo estricto  crea un error de sintaxis en el octal:

“use strict”;
var sum = 015 + // !!!  error de sintaxis
197 +
142;

Simplificando el uso de variables

El modo estricto simplifica la forma en que las variables utilizan el mapa de definiciones de variables en el código. Muchas  optimizaciones se basan en la capacidad de saber que esta variable se encuentra en esta ubicación: esto es crítico para la completa optimización del código JavaScript. Algunas veces JavaScript  realiza el mapeo de una definición de variable  por medio de su nombre en del código fuente, lo cual  hace que sea imposible ejecutar una excepción en tiempo real.  En el modo estricto la mayoría de las veces se elimina esto en caso de que suceda, a demás el compilador puede optimizar mejor el código si esta en modo estricto.

Primero, el modo estricto prohíbe el with. El problema con el with es que cualquier nombre en el podría mapear ya sea una propiedad del objeto pasado o una variable dentro del código en tiempo de ejecución: es imposible de antemano saber a cual se refiere. El modo estricto vuelve el with un error de sintaxis, entonces no hay forma para que un nombre dentro de un with se refiera a una ubicación desconocida en tiempo de ejecución:

“use strict”;
var x = 17;
with (obj) // !!! error de sistaxis
{
// Si esto no estuviera en modo estrícto, podría ser var x o
// en su lugar podrá ser obj.x?  Es imposible en general
// decir sin ejecutar el código,  por lo cual el nombre no puede ser
// optimizado.
x
;
}

La alternativa simple de asignar el objeto a una variable, para después acceder a la correspondiente propiedad en dicha variable, continua vigente como un reemplazo para with.

Segundo: la evalución del modo estrícto no introduce nuevas variables en el código.  En un código normal eval(“var x;”) introduce una variable x en la función o en alcance global. Esto significa que, en general, en una función que contiene un llamado a eval, cada nombre no referido a un argumento o variable local, puede ser mapeado a una particular definición en tiempo real (porque ese eval podría tener introducida una nueva variable que podría esconder la variable externa). En el modo estricto, eval crea variables unicamente para el código que va a ser evaluado, entonces eval no puede afectar a un nombre que hace referencia a una variable externa o a una variable local:

var x = 17;
var evalX = eval(“‘use strict’; var x = 42; x”);
assert
(x === 17);
assert
(evalX === 42);

En relación con esto, si la función eval es invocada por una expresión de la forma eval (…) en el código en modo estricto, el código será evaluado como código en modo estricto. El código puede invocar explícitamente el modo estricto, pero no es necesario hacerlo.

function strict1(str)
{
“use strict”;
return eval(str); // str será tratado como código en modo estricto
}
function strict2(f, str)
{
“use strict”;
return f(str); // no eval(…): str es estricto sii  invoca el modo estricto
}
function nonstrict(str)
{
return eval(str); // str es estricto sii invoca el modo estricto
}
strict1
(“‘Strict mode code!’”);
strict1
(“‘use strict’; ‘Strict mode code!’”);
strict2
(eval, “‘Non-strict code.’”);
strict2
(eval, “‘use strict’; ‘Strict mode code!’”);
nonstrict
(“‘Non-strict code.’”);
nonstrict
(“‘use strict’; ‘Strict mode code!’”);

Tercero, el modo estricto prohíbe eliminar nombres sin formato.  Pero los nombres dentro del de código estricto eval se comportan de la misma forma que los nombres en modo estricto que no han sido evaluados como resultado de eval. usar delete name en modo estricto es un error de sintaxis:

“use strict”;
eval(“var x; delete x;”); // !!! error de sintaxis

Haciendo eval y arguments más simples

El modo estricto hace que eval y los argumentos sean mágicamente menos extraños. Ambos involucran  una considerable cantidad de comportamiento mágico en código normal: eval para agregar o eliminar enlaces y cambiar los valores de unión, y los arguments por sus propiedades indexadas  aliando los arguments nombrados.  El modo estricto hace grandes avances hacia el tratamiento de eval y arguments como palabras clave, aunque  una corrección completa no llegará hasta una futura edición de ECMAScript.

Primero, los nombres eval y arguments no pueden ser obligados o asignados en la sintaxis del lenguaje. Todos los intentos para hacerlo resultan en errores de sintaxis:

“use strict”;
eval = 17;
arguments
++;
++eval;
var obj = { set p(arguments) { } };
var eval;
try { } catch (arguments) { }
function x(eval) { }
function arguments() { }
var y = function eval() { };
var f = new Function(“arguments”, “‘use strict’; return 17;”);

Segundo, el código en modo estricto no crea alias a las propiedades de los arguments de los objetos creados en el. En el código normal dentro de una función cuyo primer argumento es arg, realizar una asignación a arg también sería realizar una asignación a arguments[0], y vice versa (a menos que no fueran proporcionados argumentos o arguments[0] sea eliminado). Para funciones en modo estricto, los objetos arguments almacenan los argumentos originales en el momento en que la función fué invocada. El valor de arguments[i] no realiza seguimeinto al valor del correspondiente argumento nombrado, ni un argumento nombrado puede hacer seguimiento al valor en el correspondiente arguments[i].

function f(a)
{
“use strict”;
a
= 42;
return [a, arguments[0]];
}
var pair = f(17);
assert
(pair[0] === 42);
assert
(pair[1] === 17);

Tercero, arguments.callee ya no se soporta. En código normal arguments.callee se refiere a la función adjunta. Este caso de uso es débil: simplemente el nombre de la función adjunto! Por otra parte, arguments.callee dificulta considerablemente optimizaciones como funciones inline, porque debe existir la posibilidad de proporcionar una referencia a las funciones que no son inline si se accede a arguments.callee. Para funciones en modo estricto, arguments.callee es una propiedad no eliminable, la cual lanza un error cuando se asigna o recupera:

“use strict”;
var f = function() { return arguments.callee; };
f
(); // lanza un TypeError


“Asegurar” JavaScript

El modo estricto facilita escribir JavaScrip seguro. Algunos sitios web actualmente proporcionan alternativas para que los usuarios escriban JavaScript que puede ser ejecutado por el sitio web en nombre de otros usuarios. JavaScript en los navegadores puede acceder a la información privada de los usuarios , por lo cual, JavaScript debe ser parcialmente transformado antes de ser ejecutado, para controlar el acceso a las funcionalidades no permitidas o censuradas. La flexibilidad de JavaScript  hace posible esto sin verificaciones en tiempo de ejecución. Ciertas funcionalidades del lenguaje tan dominantes que las verificaciones del rendimiento en tiempo de ejecución tienen un considerable costo en el desempeño. Unas pocas modificaciones en el modo estricto, a demás de requerirse de que el código JavaScript enviado por el usuario este en modo estricto y que sea invocado de una forma en particular, reduce substancialmente la necesidad de realizar estos chequeos en tiempo de ejecución.

Primero, el valor pasado como this a una función en modo estricto  no esta encapsulado en un objeto. Para una función normal,  el valor de this es siempre un objeto:  el objeto proporcionado sí es llamado con un valor de this; el valor encapsulado sí es llamado con un booleano, string o número de this; o el objeto global sí es llamado con un undefined o null this. (Use call, apply, o bind para especificar una particularidad de this.) El encapsulamiento automático tiene un costo de desempeño, pero exponer el objeto global en un navegador es un riesgo de seguridad, porque el objeto global proporciona acceso completo a la funcionalidad “segura” de los entornos de JavaScript que deben ser invariables. Entonces para una función en modo estricto, el this se utiliza sin cambios:

“use strict”;
function fun() { return this; }
assert
(fun() === undefined);
assert
(fun.call(2) === 2);
assert
(fun.apply(null) === null);
assert
(fun.call(undefined) === undefined);
assert
(fun.bind(true)() === true);

(Tangencialmente,  los métodos integrados tampoco estarán encapsulados si this es null o undefined. [Este cambio es independiente del modo estricto pero es motivado por la misma preocupación sobre exponer el objeto global] Históricamente, pasar null o undefined a un metodo integrado como Array.prototype.sort() podría actuar como si el objeto global hubiera sido especificado. Pero pasar uno u otro valor como this a la mayoría de los métodos integrados lanza un TypeError. Booleanos, números y strings todavía están encapsuladas por estos métodos: Esto es sólo cuando estos métodos de una u otra forma actúan sobre el objeto global que han sido cambiados.)

Segundo, en modo estricto ya nunca más será posible recorrer la pila JavaScript por medio de extensiones comúnmente implementadas para ECMAScript.  En código normal con esas extensiones, cuando una función fun está apunto de ser llamada, fun.caller es la función más reciente que ha invocado fun y fun.arguments son los argumentos para dicha invocación de fun. Ambas extensiones son problemáticas para un JavaScript “seguro”, porque permiten al código “seguro” acceder a funciones “privilegiadas” y sus (potencialmente inseguros) argumentos. Sí fun se encuentra en modo estricto, ambas fun.caller y fun.arguments son propiedades no eliminables las cuales lanzarán un error cuando se asignen o se accedan:

function restricted()
{
“use strict”;
restricted.
caller; // lanza un TypeError
restricted.
arguments; // lanza un TypeError
}
function privilegedInvoker()
{
return restricted();
}
privilegedInvoker
();

Tercero, los argumentos para el modo estricto no proporcionarán más acceso a las variables de la llamada a la función correspondiente. En algunas implementaciones antiguas de ECMAScript arguments.caller era un objeto el cual las propiedades correspondian a las variables de la función. Esto es un Problema de seguridad porque elimina la capacidad de esconder valores privilegiados de la función por medio de la abstración; Esto también se opone a la mayoría de optimizaciones. Por estas razones los navegadores recientes no las implementan. Sin embargo, debido a su funcionalidad histórica, arguments.caller en una función en modo estricto es también una propiedad no eliminable que arroja un error al asignarse o ser consultada:

“use strict”;
function fun(a, b)
{
“use strict”;
var v = 12;
return arguments.caller; // lanza un TypeError
}
fun
(1, 2); // no exponer v (or a or b)


Sentando bases para las futuras versiones de ECMAScript

Las versiones futuras de ECMAScript introducirán una nueva sintaxis, y el modo estricto en  ECMAScript 5 aplica algunas restricciones para facilitar la transición. Será más fácil que hacer algunos cambios si los fundamentos de esos cambios están prohibidos en modo estricto

Primero, en modo estricto  una lista corta de identificadores se comvierte en palabras reservadas. Esas palabras son implements, interface, let, package, private, protected, public, static, y yield. En modo estricto, por lo tanto, no es posible nombrar, usar variables, o argumentos con estos nombres. Una advertencia especifica para Mozilla: Si tu código es JavaScript 1.7 o superior (tu usas código chrome, o si has utilizado <script type=”">) y es código en modo estricto, let y yield tienen la funcionalidad que han tenido desde que esas palabras reservadas fueron introducidas. Pero en el código en modo estricto en la Web, cargado con  <script src=”"> o <script>…</script>, no será posible usar let/yield como identificadores.

Segundo, el modo estricto prohíbe declaraciones de función en el nivel superior de un script o función. En código normal en los navegadores, las declaraciones de función son permitidas “en cualquier parte”. Esto no hace parte de ES5! Esta es una extensión con semántica incompatible en diferentes navegadores. Futuras ediciones de ECMAScript esperan especificar nueva semántica para evitar la declaración de funciones en la parte superior de un script o función. Prohibir tales declaraciones de función en modo estricto “aclara el panorama” para la futura especificación de las versiones de ECMAScript:

“use strict”;
if (true)
{
function f() { } // !!! error de sintaxis
f
();
}
for (var i = 0; i &lt; 5; i++)
{
function f2() { } // !!! error de sintaxis
f2
();
}
function baz() // permitido
{
function eit() { } // también permitido
}

Esta restricción no es propia del modo estricto, ya que tales declaraciones de función son extensiones. Pero es la recomendación del comité de ECMAScript, y los navegadores lo incorporarán.


Modo estricto en los Navegadores

Firefox 4 es el primer navegador que inplementa completamente el modo estrícto. El motor Nitro que se encuentra en muchos  navegadores no va más allá de un cercano soporte al modo estricto. Chrome tiene también started para implementar el modo estricto. Internet Explorer y Opera no han iniciado la implementación del modo estricto; puede tomarse la libertad de enviar preguntas a los fabricantes de esos navegadores sugiriendo soporte para modo estricto.

Los navegadores  seguramente no implementarán el modo estrícto, porque no dependen ciegamente de el. El modo estricto cambia la semántica.  Basándose en esos cambios se causarán fallas y errores en los navegadores que no implementan el modo estricto. Tenga cuidado en el uso del modo estricto, y haga copias de seguridad de las dependencias en modo estricto con las funcionalidades de prueba para comprobar que las características pertinentes de modo estricto están implementadas.

Para probar el modo estricto, descargue Firefox nightly e inicia tus pruebas. También considera estas restricciones cuando escribas nuevo código y cuando actualices código existente. (para estar absolutamente seguro, sin embargo es probablemente mejor esperar a usarlo en producción, hasta que este soportado en los navegadores)

Fuente: Mozilla Hacks.

Conviertiendo fallas en errores

El modo estrícto cambia fallas pasadas por alto a errores. JavaScript fué diseñado para ser fácil para los desarolladores notavos, y algunas veces ofrece operaciones que pueden cambiar algunas fallas en errores. Algunas veces esto soluciona el problema inmediatos, pero también podría crear problemas peores en el futuro. El modo estricto trata estos fallos como errores para que sean ubicados y corregidos rápidamente.

En primer lugar, el modo estricto no permite crear accidentalmente variables globales. En JavaScript normal, escribir mal una variable simplemente crea una propiedad en el objeto global y se continúa con el “trabajo” (aunque el fracaso futuro es posible: es probable, en el actual JavaScript). Las asignaciones que accidentalmente crea variables globales podrían lanzar una excepción si se esta trabajando en modo estricto:

“use strict”;

mistypedVaraible = 17; // lanza un ReferenceError

Segundo, el modo estrícto realiza asignaciones las cuales podrían de otra forma fallar sileciosamente lanzando una excepción. Por ejemplo, NaN no es una variables global de escritura. En el código normal una asignación a NaN no haría nada; el desarrollador no recibe notificación de fallos.  En modo estrćto una asignación a NaN lanza una excepción. Alguna asignación que silenciosamente falle en códogo normal lanzará una excepción si se encontrata escrita en modo estricto:

“use strict”;
NaN
= 42; // lanza un TypeError
var obj = { get x() { return 17; } };
obj.
x = 5; // lanza un TypeError
var fixed = {};
Object.
preventExtensions(fixed);
fixed.
newProp = “ohai”; // lanza un TypeError

Tercero, Si tratas de eliminar propiedades no eliminables, el modo estrícto lanza un error (pero antes de intentarlo podría simplemente no tener efecto):

“use strict”;
delete Object.prototype; // lanza un TypeError

Cuarto, el modo estricto requiere que todas la propiedades nombradas en un objeto literal sean únicas. En el código normal se podría duplicar los nombres de propiedades, con el último valor determinado para la propiedad. Pero desde que el último no modifique nada, la duplicación no es más que un vector de errores, si el código modifica el valor de la propiedad por otro que cambie el valor de la última instancia, duplicar nombres de propiedades es un error de sintaxis en el modo estrícto:

“use strict”;
var o = { p: 1, p: 2 }; // !!! error de sintaxis

Quinto, el modo estrícto requiere que los nombres de los argumentos de las funciones sean únicos.  En el código normal el último argumento duplicado esconde los últimos argumentos con el mismo nombre. Estos argumentos están disponibles por medio de arguments[i], por lo tanto no son completamente inaccesibles.  Sin embargo, esconder errores tiene poco sentido y es probablemente algo indeseable (esto podría , por ejemplo, ocultar un error), pero en el modo estricto duplicar nombres de argumentos es un error de sintaxis:

function sum(a, a, c) // !!!  error de sintaxis
{
“use strict”;
return a + b + c; // Error si este código corre
}

Sexto, el modo estricto prohíbe la sintáxis octal. La sintáxis octal no hace parte de ECMAScript, pero es soportada por todos los navegadores poniendo como prefijo un cero al número octal: 0644 === 420 and “�45″ === “%”.  Los desarrolladores novatos algunas veces creen que adicionar un cero como prefijo no tiene significado semántico, entonces lo utilizan para alinear los números en su código fuente. — Pero esto cambia el significado del número! La sintaxis octal raramente es usada y puede ser erroneamente utilizada, en este caso el modo estricto  crea un error de sintaxis en el octal:

“use strict”;
var sum = 015 + // !!!  error de sintaxis
197 +
142;

Simplificando el uso de variables

El modo estícto simplifica la forma en que las variables utilizan el mapa de definiciones de variables en el código. Muchas  optimizaciones se basan en la capacidad de saber que esta variable se encuentra en esta ubicación: esto es crítico para la completa optimización del código JavaScript. Algunas veces JavaScript  realiza el mapeo de una deficinión de variable  por medio de su nombre en del código fuente, lo cual  hace que sea imposible ejecutar una excepción en tiempo real.  En el modo estrícto la mayoría de las veces se elimina esto en caso de que suceda, a demás el compilador puede optimizar mejor el código si esta en modo estŕcto.

Primero, el modo estrícto prohibe el with. El priblema con el with es que cualquier nombre en el podría mapear ya sea una propiedad del objeto pasado o una variable dentro del código en tiempo de ejecución: es imposible de antemano saber a cual se refiere. El modo estrícto vuelve el with un error de sintaxis, entonces no hay forma para que un nombre dentro de un with se refiera a una ubicación desconocida en tiempo de ejecución:

“use strict”;
var x = 17;
with (obj) // !!! error de sistaxis
{
// Si esto no estuviera en modo estrícto, podría ser var x o
// en su lugar podrá ser obj.x?  Es imposible en general
// decir sin ejecutar el código,  por lo cual el nombre no puede ser
// optimizado.
x
;
}

La alternativa simple de asignar el objeto a una variable, para después acceder a la correspondiente propiedad en dicha variable, continua vigente como un reemplazo para with.

Segundo, la evalución del modo estrícto no introduce nuevas variables en el código.  En un código normal eval(“var x;”) introduce una variable x en la función o en alcance global. Esto significa que, en general, en una función que contiene un llamado a eval, cada nombre no referido a un argumento o variable local, puede ser mapeado a una particular definicion en tiempo real (porque ese eval podría tener introducida una nueva variable que podria esconder la variable externa). En el modo estrícto, eval crea variables unicamente para el código que va a ser evaluado, entonces eval no puede afectar a un nombre que hace referencia a una variable externa o a una variable local:

var x = 17;
var evalX = eval(“‘use strict’; var x = 42; x”);
assert
(x === 17);
assert
(evalX === 42);

En relación con esto, si la función eval es invocada por una expresión de la forma eval (…) en el código en modo estricto, el código será evaluado como código en modo estricto. El código puede invocar explícitamente el modo estricto, pero no es necesario hacerlo.

function strict1(str)
{
“use strict”;
return eval(str); // str será tratado como código en modo estricto
}
function strict2(f, str)
{
“use strict”;
return f(str); // no eval(…): str es estricto sii  invoca el modo estricto
}
function nonstrict(str)
{
return eval(str); // str es estricto sii invoca el modo estricto
}
strict1
(“‘Strict mode code!’”);
strict1
(“‘use strict’; ‘Strict mode code!’”);
strict2
(eval, “‘Non-strict code.’”);
strict2
(eval, “‘use strict’; ‘Strict mode code!’”);
nonstrict
(“‘Non-strict code.’”);
nonstrict
(“‘use strict’; ‘Strict mode code!’”);

Tercero, El modo estricto prohíbe eliminar nombres sin formato.  Pero los nombres dentro del de código estricto eval se comportan de la misma forma que los nombres en modo estricto que no han sido evaluados como resultado de eval. usar delete name en modo estricto es un error de sintaxis:

“use strict”;
eval(“var x; delete x;”); // !!! error de sintaxis

Haciendo eval y arguments más simples

El modo estricto hace que eval y los argumentos sean mágicamente menos extraños. Ambos involucran  una considerable cantidad de comportamiento mágico en código normal: eval para agregar o eliminar enlaces y cambiar los valores de unión, y los arguments por sus propiedades indexadas  aliando los arguments nombrados.  El modo estricto hace grandes avances hacia el tratamiento de eval y arguments como palabras clave, aunque  una corrección completa no llegará hasta una futura edición de ECMAScript.

Primero, los nombres eval y arguments no pueden ser obligados o asignados en la sintaxis del lenguaje. Todos los intentos para hacerlo resultan en errores de sintaxis:

“use strict”;
eval = 17;
arguments
++;
++eval;
var obj = { set p(arguments) { } };
var eval;
try { } catch (arguments) { }
function x(eval) { }
function arguments() { }
var y = function eval() { };
var f = new Function(“arguments”, “‘use strict’; return 17;”);

Segundo, el código en modo estricto no crea alias a las propiedades de los arguments de los objetos creados en el. En el código normal dentro de una función cuyo primer argumento es arg, realizar una asignación a arg también sería realizar una asignación a arguments[0], y vice versa (a menos que no fueran proporcionados argumentos o arguments[0] sea eliminado). Para funciones en modo estricto, los objetos arguments almacenan los argumentos originales en el momento en que la función fué invocada. El valor de arguments[i] no realiza seguimeinto al valor del correspondiente argumento nombrado, ni un argumento nombrado puede hacer seguimiento al valor en el correspondiente arguments[i].

function f(a)
{
“use strict”;
a
= 42;
return [a, arguments[0]];
}
var pair = f(17);
assert
(pair[0] === 42);
assert
(pair[1] === 17);

Tercero, arguments.callee ya no se soporta. En código normal arguments.callee se refiere a la función adjunta. Este caso de uso es débil: simplemente el nombre de la función adjunto! Por otra parte, arguments.callee dificulta considerablemente optimizaciones como funciones inline, porque debe existir la posibilidad de proporcionar una referencia a las funciones que no son inline si se accede a arguments.callee. Para funciones en modo estricto, arguments.callee es una propiedad no eliminable, la cual lanza un error cuando se asigna o recupera:

“use strict”;
var f = function() { return arguments.callee; };
f
(); // lanza un TypeError

“Asegurar” JavaScript

El modo estricto facilita escribir JavaScrip seguro. Algunos sitios web actualmente proporcionan alternativas para que los usuarios escriban JavaScript que puede ser ejecutado por el sitio web en nombre de otros usuarios. JavaScript en los navegadores puede acceder a la información privada de los usuarios , por lo cual, JavaScript debe ser parcialmente transformado antes de ser ejecutado, para controlar el aceso a las funcionalidades no permitidas o censuradas. La flexibilidad de JavaScript  hace posible esto sin verificaciones en tiempo de ejecución. Ciertas funcionalidades del lenguaje tan dominantes que las verificaciones del rendimiento en tiempo de ejecución tienen un considerable costo en el desempeño. Unas pocas modificaciones en el modo estricto, a demás de requerirse de que el código JavaScript enviado por el usuario este en modo estricto y que sea invocado de una forma en particular, reduce substancialmente la necesidad de realizar estos chequeos en tiempo de ejecución.

Primero, el valor pasado como this a una función en modo estricto  no esta encapsulado en un objeto. Para una función normal,  el valor de this es siempre un objeto:  el objeto proporcionado sí es llamado con un valor de this; el valor encapsulado sí es llamado con un booleano, string o número de this; o el objeto global sí es llamado con un undefined o null this. (Use call, apply, o bind para especificar una particularidad de this.) El encapsulamiento automático tiene un costo de desempeño, pero exponer el objeto global en un navegador es un riesgo de seguridad, porque el objeto global proporciona acceso completo a la funcionalidad “segura” de los entornos de JavaScript que deben ser invariables. Entonces para una función en modo estricto, el this se utiliza sin cambios:

“use strict”;
function fun() { return this; }
assert
(fun() === undefined);
assert
(fun.call(2) === 2);
assert
(fun.apply(null) === null);
assert
(fun.call(undefined) === undefined);
assert
(fun.bind(true)() === true);

(Tangencialmente,  los metodos integrados tampoco estarán encapsulados si this es null o undefined. [Este cambio es independiente del modo estricto pero es motivado por la misma preocupación sobre exponer el objeto global] Historicamente, pasar null o undefined a un metodo integrado como Array.prototype.sort() podría actuar como si el objeto global hubiera sido especificado. Pero pasar uno u otro valor como this a la mayoría de los métodos integrados lanza un TypeError. Booleanos, números y strings todavía estan encapsuladas por estos métodos: Esto es sólo cuando estos métodos de una u otra forma actúan sobre el objeto global que han sido cambiados.)

Segundo, en modo estricto ya nunca más será posible recorrer la pila JavaScript por medio de extensiones comunmente implementadas para ECMAScript.  En código normal con esas extensiones, cuando una función fun está apunto de ser llamada, fun.caller es la función más reciente que ha invocado fun y fun.arguments son los argumentos para dicha invocacion de fun. Ambas extensiones son problematicas para un JavaScript “seguro”, porque permiten al código “seguro” acceder a funciones “privilegiadas” y sus (potencialmente insuguros) argumentos. Sí fun se encuentra en modo estrícto, ambas fun.caller y fun.arguments son propiedades no eliminables las cuales lanzarán un error cuando se asignen o se accedan:

function restricted()
{
“use strict”;
restricted.
caller; // lanza un TypeError
restricted.
arguments; // lanza un TypeError
}
function privilegedInvoker()
{
return restricted();
}
privilegedInvoker
();

Tercero, los argumentos para el modo estricto no proporcionarán más acceso a las variables de la llamada a la función correspondiente. En algunas implementaciones antiguas de ECMAScript arguments.caller era un objeto el cual las propiedades correspondian a las variables de la función. Esto es un Problema de seguridad porque elimina la capacidad de esconder valores privilegiados de la función por medio de la abstración; Esto también se opone a la mayoría de optimizaciones. Por estas razones los navegadores recientes no las implementan. Sin embargo, debido a su funcionalidad histórica, arguments.caller en una función en modo estricto es también una propiedad no eliminable que arroja un error al asignarse o ser consultada:

“use strict”;
function fun(a, b)
{
“use strict”;
var v = 12;
return arguments.caller; // lanza un TypeError
}
fun
(1, 2); // no exponer v (or a or b)

Sentando bases para las futuras versiones de ECMAScript

Las versiones futuras de ECMAScript introducirán una nueva sintaxis, y el modo estricto en  ECMAScript 5 aplica algunas restricciones para facilitar la transición. Será más fácil que hacer algunos cambios si los fundamentos de esos cambios están prohibidos en modo estricto

Primero, en modo estricto  una lista corta de identificadores se comvierte en palabras reservadas. Esas palabras son implements, interface, let, package, private, protected, public, static, y yield. En modo estricto, por lo tanto, no es posible nombrar, usar variables, o argumentos con estos nombres. Una advertencia especifica para Mozilla: Si tu código es JavaScript 1.7 o superior (tu usas código chrome, o si has utilizado <script type=”">) y es código en modo estricto, let y yield tienen la funcionalidad que han tenido desde que esas palabras reservadas fueron introducidas. Pero en el código en modo estricto en la Web, cargado con  <script src=”"> o <script>…</script>, no será posible usar let/yield como identificadores.

Segundo,el modo estricto prohíbe declaraciones de función en el nivel superior de un script o función. En código normal en los navegadores, las declaraciones de función son permitidas “en cualquier parte”. Esto no hace parte de ES5! Esta es una extensión con semántica incompatible en diferentes navegadores. Futuras ediciones de ECMAScript esperan especificar nueva semántica para evitar la declaración de funciones en la parte superior de un script o función. Prohibir tales declaraciones de función en modo estricto “aclara el panorama” para la futura especificación de las versiones de ECMAScript:

“use strict”;
if (true)
{
function f() { } // !!! error de sintaxis
f
();
}
for (var i = 0; i &lt; 5; i++)
{
function f2() { } // !!! error de sintaxis
f2
();
}
function baz() // permitido
{
function eit() { } // también permitido
}

Esta restricción no es propia del modo estricto, ya que tales declaraciones de función son extensiones. Pero es la recomendación del comité de ECMAScript, y los navegadores lo incorporarán.

Modo estricto en los Navegadores

Firefox 4 es el primer navegador que inplementa completamente el modo estrícto. El motor Nitro que se encuentra en muchos  navegadores no va más allá de un cercano soporte al modo estricto. Chrome tiene también started para implementar el modo estricto. Internet Explorer y Opera no han iniciado la implementación del modo estricto; Puede tomarse la libertad de enviar preguntas a los fabricantes de esos navegadores  sugiriendo soporte para modo estricto.

Los navegadores  seguramente no implementarán el modo estrícto, porque no dependen ciegamente de el. El modo estricto cambia la semántica.  Basándose en esos cambios se causarán fallas y errores en los navegadores que no implementan el modo estricto. Tenga cuidado en el uso del modo estricto, y haga copias de seguridad de las dependencias en modo estricto con las funcionalidades de prueba para comprobar que las características pertinentes de modo estricto están implementadas.

Para probar el modo esricto, descarga Firefox nightly e inicia tus pruebas. También considera estas restricciones cuando escribas nuevo código y cuando actualices código existente. (para estar absolutamente seguro, sin embargo es probablemente mejor esperar a usarlo en producción, hasta que este soportado en los navegadores)

Fuente: Mozilla Hacks.