From b2ba4babf251c42614a04caf52f6280264028e60 Mon Sep 17 00:00:00 2001 From: Ana Paula Lemos Date: Sun, 10 May 2020 16:18:35 -0300 Subject: [PATCH 1/2] Global object translation --- .../05-global-object/article.md | 190 ++++++------------ 1 file changed, 61 insertions(+), 129 deletions(-) diff --git a/1-js/06-advanced-functions/05-global-object/article.md b/1-js/06-advanced-functions/05-global-object/article.md index da4adc2b6..88f102d55 100644 --- a/1-js/06-advanced-functions/05-global-object/article.md +++ b/1-js/06-advanced-functions/05-global-object/article.md @@ -1,155 +1,87 @@ -# Global object +# Objeto global -The global object provides variables and functions that are available anywhere. Mostly, the ones that are built into the language or the host environment. +O objeto global fornece variáveis e funções que estão disponíveis em qualquer lugar. Por padrão, aqueles que são incorporados ao idioma ou ao ambiente. -In a browser it is named "window", for Node.js it is "global", for other environments it may have another name. +No navegador ele é chamado de `window`, no Node.js é `global`, em outros ambientes pode ter outro nome. -For instance, we can call `alert` as a method of `window`: +Recentemente, `globalThis` foi adicionado a linguagem como um nome padrão para o objeto global, que deve ser suportado em todos os ambientes. Em alguns navegadores, como o Edge não-Chromium, `globalThis` ainda não é suportado, mas pode ser facilmente utilizado através de um polyfill. -```js run -alert("Hello"); - -// the same as -window.alert("Hello"); -``` - -We can reference other built-in functions like `Array` as `window.Array` and create our own properties on it. - -## Browser: the "window" object - -For historical reasons, in-browser `window` object is a bit messed up. - -1. It provides the "browser window" functionality, besides playing the role of a global object. - - We can use `window` to access properties and methods, specific to the browser window: - - ```js run - alert(window.innerHeight); // shows the browser window height - - window.open('http://google.com'); // opens a new browser window - ``` - -2. Top-level `var` variables and function declarations automatically become properties of `window`. - - For instance: - ```js untrusted run no-strict refresh - var x = 5; - - alert(window.x); // 5 (var x becomes a property of window) - - window.x = 0; - - alert(x); // 0, variable modified - ``` - - Please note, that doesn't happen with more modern `let/const` declarations: - - ```js untrusted run no-strict refresh - let x = 5; - - alert(window.x); // undefined ("let" doesn't create a window property) - ``` - -3. Also, all scripts share the same global scope, so variables declared in one ` +Todas as propriedades do objeto global podem ser acessadas diretamente: - - ``` - -4. And, a minor thing, but still: the value of `this` in the global scope is `window`. - - ```js untrusted run no-strict refresh - alert(this); // window - ``` - -Why was it made like this? At the time of the language creation, the idea to merge multiple aspects into a single `window` object was to "make things simple". But since then many things changed. Tiny scripts became big applications that require proper architecture. - -Is it good that different scripts (possibly from different sources) see variables of each other? - -No, it's not, because it may lead to naming conflicts: the same variable name can be used in two scripts for different purposes, so they will conflict with each other. - -As of now, the multi-purpose `window` is considered a design mistake in the language. - -Luckily, there's a "road out of hell", called "JavaScript modules". - -If we set `type="module"` attribute on a ` - ``` +```js run untrusted refresh +var gVar = 5; -- Two modules that do not see variables of each other: +alert(window.gVar); // 5 (se torna uma propriedade do objeto global) +``` - ```html run - +Por favor, não confie nisso! Esse comportamento existe por motivos de compatibilidade. Scripts modernos usam [JavaScript modules](info:modules) onde tal coisa não acontece. - - ``` +Se usássemos `let`, isso não aconteceria: -- And, the last minor thing, the top-level value of `this` in a module is `undefined` (why should it be `window` anyway?): +```js run untrusted refresh +let gLet = 5; - ```html run - - ``` +alert(window.gLet); // undefined (não se torna uma propriedade do objeto global) +``` -**Using `