JavaScript tiene dos ámbitos que son el ámbito local y el ámbito global y cuando asignamos directamente una variable sin declarar, se convierte en una propiedad global del objeto de la ventana. La ventana es el objeto del navegador. No es el objeto de JavaScript. El navegador lo crea automáticamente y se puede acceder a él desde cualquier lugar de la página web.
Asignemos un valor a una variable x sin declararlo y verifiquemos con la ayuda del método hasOwnProperty() , si la variable x pertenece al objeto ventana o no.
Ejemplo 1:
Javascript
// Before x is not assigned console.log(`1 -> ${window.hasOwnProperty('x')}`); x= 2; // Assigning x without declaring it console.log(`2 -> ${window.hasOwnProperty('x')}`); // To show both value refers to same object console.log(` 3 -> ${window.x === x}`);
Producción:
1 -> false 2 -> true 3 ->true
Ejemplo 2: en el siguiente ejemplo, a la variable x se le asigna un valor sin declararlo, por lo que se convertirá en una propiedad global y se podrá acceder a ella desde cualquier lugar.
Javascript
function check(){ y = "GeeksForGeeks"; } check(); console.log(y);
Producción:
GeeksForGeeks
También podemos acceder a este valor como window.x . Entonces, la función check() también se puede escribir de la siguiente manera:
function check(){ window.x = "GeeksForGeeks"; }
También podemos mostrar que el valor asignado sin declararlo se convirtió en una propiedad del objeto ventana con la ayuda de hasOwnProperty() .
Ejemplo 3:
Javascript
function check(){ x = "GeeksForGeeks"; } check(); if(window.hasOwnProperty('x')){ console.log(`x is a Property of Window Object`); }
Producción:
x is a Property of Window Object
Podemos usar el modo estricto, que es una característica nueva en ECMAScript 5 que le permite colocar un programa o una función en un contexto operativo «estricto». Tirará Error de referencia: x no está definida, cuando asignamos un valor a una variable sin declararla.
Ejemplo 4:
Javascript
'use strict' // For strict mode try{ function check(){ x = "GeeksForGeeks"; } check(); } catch(err){ console.log(err); }
Producción:
ReferenceError: x is not defined at check (<anonymous>:5:11) at <anonymous>:7:5