- Notifications
You must be signed in to change notification settings - Fork230
Global object#181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
EzequielCaste merged 10 commits intojavascript-tutorial:masterfromvplentinax:global-objectJun 24, 2020
Uh oh!
There was an error while loading.Please reload this page.
Merged
Global object#181
Changes fromall commits
Commits
Show all changes
10 commits Select commitHold shift + click to select a range
67e28ff
global-object
vplentinax351872e
Merge branch 'master' into global-object
vplentinaxbd8d026
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinax4dc5c34
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxda03b27
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxcd63810
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinax5bebd2d
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxf5dcbb3
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxf0a887a
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxadbe14c
Update 1-js/06-advanced-functions/05-global-object/article.md
vplentinaxFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
65 changes: 34 additions & 31 deletions1-js/06-advanced-functions/05-global-object/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,87 +1,90 @@ | ||
#Objeto Global | ||
El objetoglobalproporcionavariablesy funciones que están disponibles en cualquier lugar. Por defecto, aquellas que están integradas en el lenguaje o el entorno. | ||
En un navegador se denomina`window`,para Node.jses`global`,para otros entornos puede tener otro nombre. | ||
Recientemente, `globalThis`se agregó al lenguaje, como un nombre estandarizado para un objeto global, que debería ser compatible con todos los entornos. En algunos navegadores, comoChromium Edge, `globalThis`aún no es compatible, pero se puede usar mediante *polyfill*. | ||
Aquí usaremos `window`, suponiendo que nuestro entorno sea un navegador. Si su scriptpuede ejecutarse en otros entornos, es mejor usar`globalThis`en su lugar. | ||
Se puede acceder directamente a todas las propiedades del objeto global: | ||
```js run | ||
alert("Hello"); | ||
//es lo mismo que | ||
window.alert("Hello"); | ||
``` | ||
En un navegador, las funciones y variablesglobales declaradas con`var` (¡**no**`let /const`!), se convierten en propiedad del objeto global: | ||
```js run untrusted refresh | ||
var gVar = 5; | ||
alert(window.gVar); // 5 (se convirtió en una propiedad del objeto global) | ||
``` | ||
¡Por favor no te fíes de eso! Este comportamiento existe por razones de compatibilidad. Los scriptsmodernos hacen uso de [Módulos Javascript](info:modules)para que tales cosas no sucedan. | ||
Si usáramos`let`en su lugar, esto no sucedería: | ||
```js run untrusted refresh | ||
let gLet = 5; | ||
alert(window.gLet); // undefined (no se convierte en una propiedad del objeto global) | ||
``` | ||
Si un valor es tan importante que desea que esté disponible globalmente, escríbalo directamente como una propiedad: | ||
```js run | ||
*!* | ||
//Hacer que la información actual del usuario seaglobal,para que todos losscriptspuedan acceder a ella | ||
window.currentUser = { | ||
name: "John" | ||
}; | ||
*/!* | ||
//en otro lugar en el código | ||
alert(currentUser.name); // John | ||
//o, si tenemos una variable localcon el nombre "currentUser" | ||
//obténgalo de la ventana explícitamente (¡seguro!) | ||
alert(window.currentUser.name); // John | ||
``` | ||
Dicho esto, generalmente se desaconseja el uso de variables globales. Debe haber la menor cantidad posible de ellas. El diseño del código donde una función obtiene variablesde "entrada" y produce cierto "resultado" es más claro, menos propenso a errores y más fácil de probar que si usa variables externas o globales. | ||
##Uso para polyfills | ||
Usamos el objeto global para probar el soporte de las características del lenguaje moderno. | ||
Por ejemplo, probar si existe un objeto `Promise` incorporado (no existe en navegadores muy antiguos): | ||
```js run | ||
if (!window.Promise) { | ||
alert("Your browser is really old!"); | ||
} | ||
``` | ||
Si no hay ninguno (suponiendo que estamos en un navegador antiguo),podemos crear"polyfills":agregar funciones que no son compatibles con el entorno, pero que existen en el estándar moderno. | ||
```js run | ||
if (!window.Promise) { | ||
window.Promise = ... //implementación personalizada del lenguaje moderno | ||
} | ||
``` | ||
## Resumen | ||
- El objeto global contiene variables que deberían estar disponibles en todas partes. | ||
Eso incluye JavaScript incorporado, como `Array` y valores específicos del entorno, como ` window.innerHeight` -- la altura de la ventana en el navegador. | ||
-El objetoglobaltiene un nombre universal: `globalThis`. | ||
... Pero con mayor frecuencia se hace referencia a nombres específicos del entorno de la "vieja escuela", como `window` (navegador) y `global` (Node.js). Como `globalThis` es una propuesta reciente, no es compatible con Chromium Edge (pero sí mediante *polyfill*). | ||
- Deberíamos almacenar valores en el objeto global solo si son verdaderamente globales para nuestro proyecto. Y manteniendo su uso al mínimo. | ||
- En el navegador, a menos que estemos utilizando [módulos](info:modules), las funciones globales y las variables declaradas con `var` se convierten en una propiedad del objeto global. | ||
- Para que nuestro código esté preparado para el futuro y sea más fácil de entender, debemos acceder a las propiedades del objeto global directamente, como `window.x`. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.