Skip to content

Commit 9cb9ff6

Browse files
authored
Update article.md
1 parent 23be384 commit 9cb9ff6

File tree

1 file changed

+21
-21
lines changed
  • 1-js/06-advanced-functions/07-new-function

1 file changed

+21
-21
lines changed

1-js/06-advanced-functions/07-new-function/article.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ let func = new Function ([arg1[, arg2[, ...argN]],] functionBody)
1313

1414
Em outras palavras, os parâmetros da função (ou, mais precisamente, os nomes deles) vêm primeiro, e o corpo da função vem por último. Todos os argumentos são `strings`.
1515

16-
É mais de compreender olhando um exemplo. Aqui está uma função com dois argumentos:
16+
É mais fácil de compreender olhando um exemplo. Aqui está uma função com dois argumentos:
1717

1818
```js run
1919
let sum = new Function('a', 'b', 'return a + b');
@@ -42,7 +42,7 @@ let func = new Function(str);
4242
func();
4343
```
4444

45-
Ela é usada em casos muito específicos, como quando nós recebemos código de um servidor, ou para compilar dinamicamente a função a partir de um template. A necessidade disso geralmente surge em estágios avançados de desenvolvimento.
45+
Ela é usada em casos muito específicos, como quando nós recebemos código de um servidor, ou para compilar dinamicamente a função a partir de um `template`. A necessidade disso geralmente surge em estágios avançados de desenvolvimento.
4646

4747
## Closure
4848

@@ -83,25 +83,25 @@ getFunc()(); // *!*"test"*/!*, do escopo léxico de getFunc
8383

8484
Essa caracteristica especial de `new Function` parece estranha, mas se apresenta muito útil na prática.
8585

86-
Imagine that we must create a function from a string. The code of that function is not known at the time of writing the script (that's why we don't use regular functions), but will be known in the process of execution. We may receive it from the server or from another source.
86+
Imagine que nós precisamos criar uma função a partir de uma `string`. O código dessa função é desconhecida durante a escrita do script (por esse motivo nós não usamos funções regulares), mas vai ser conhecido durante o processo de execução. Nós podemos recebe-la do servidor ou de outra fonte.
8787

88-
Our new function needs to interact with the main script.
88+
Nossa nova função precisa interagir com o `script` principal.
8989

90-
Perhaps we want it to be able to access outer local variables?
90+
Talvez nós queremos que ela consiga acessar variáveis locias externas?
9191

92-
The problem is that before JavaScript is published to production, it's compressed using a *minifier* -- a special program that shrinks code by removing extra comments, spaces and -- what's important, renames local variables into shorter ones.
92+
O Problema é que antes do JavaScript ser publicado para produção, ele é comprimido usando um *minificador* -- um programa especial que encolhe código removendo comentários, espaços e -- o mais importante, renomeia variáveis locais em variáveis mais curtas.
9393

94-
For instance, if a function has `let userName`, minifier replaces it `let a` (or another letter if this one is occupied), and does it everywhere. That's usually a safe thing to do, because the variable is local, nothing outside the function can access it. And inside the function, minifier replaces every mention of it. Minifiers are smart, they analyze the code structure, so they don't break anything. They're not just a dumb find-and-replace.
94+
Por exemplo, se uma função tem `let userName`, o minificador o troca por `let a` (ou outra letra se esta estiver ocupada), e ele faz isso em toda parte. Isso usualmente é uma coisa segura de se fazer, porque a variável é local, nada fora da função pode acessar ela. E dentro da função, o minificador troca todas as suas menções. Minificadores são inteligentes, eles analisam a estrutura do código, para que eles não quebrem nada. Eles não são um simples "encontra-e-repõem".
9595

96-
But, if `new Function` could access outer variables, then it would be unable to find `userName`, since this is passed in as a string *after* the code is minified.
96+
Entretanto, se `new Function` pudesse acessar variáveis externas, então ele não conseguiria encontrar `userName`, pois ele é passado como uma string *depois* que o código é minificado.
9797

98-
**Even if we could access outer lexical environment in `new Function`, we would have problems with minifiers.**
98+
**Mesmo se nós pudessemos acessar o escopo léxico externo na `new Function`, nós teriamos problemas com minificadores.**
9999

100-
The "special feature" of `new Function` saves us from mistakes.
100+
A "característica especial" de `new Function` nos salva de erros.
101101

102-
And it enforces better code. If we need to pass something to a function created by `new Function`, we should pass it explicitly as an argument.
102+
E ela assegura um código melhor. Se nós precisarmos passar algo para uma função criada por `new Function`, nós devemos passar ele explicitamente como um argumento.
103103

104-
Our "sum" function actually does that right:
104+
A nossa função "sum" faz isso corretamente:
105105

106106
```js run
107107
*!*
@@ -111,27 +111,27 @@ let sum = new Function('a', 'b', 'return a + b');
111111
let a = 1, b = 2;
112112

113113
*!*
114-
// outer values are passed as arguments
114+
// variáveis externas são passdas como argumentos
115115
alert( sum(a, b) ); // 3
116116
*/!*
117117
```
118118

119-
## Summary
119+
## Resumo
120120

121-
The syntax:
121+
A sintaxe:
122122

123123
```js
124124
let func = new Function(arg1, arg2, ..., body);
125125
```
126126

127-
For historical reasons, arguments can also be given as a comma-separated list.
127+
Por razões históricas, arguments can also be given as a comma-separated list.
128128

129-
These three mean the same:
129+
Estes três significam o mesmo:
130130

131131
```js
132-
new Function('a', 'b', 'return a + b'); // basic syntax
133-
new Function('a,b', 'return a + b'); // comma-separated
134-
new Function('a , b', 'return a + b'); // comma-separated with spaces
132+
new Function('a', 'b', 'return a + b'); // sintaxe básica
133+
new Function('a,b', 'return a + b'); // separada por vírgula
134+
new Function('a , b', 'return a + b'); // separada por vírgula com espaços
135135
```
136136

137-
Functions created with `new Function`, have `[[Environment]]` referencing the global Lexical Environment, not the outer one. Hence, they cannot use outer variables. But that's actually good, because it saves us from errors. Passing parameters explicitly is a much better method architecturally and causes no problems with minifiers.
137+
Funções criadas com `new Function`, têm `[[Environment]]` referenciando o escopo léxico global, e não o escopo externo. Por isso, elas não podem usar variáveis externas. Porém isso na verdade é bom, porque isto nos salva de erros. Passar parametros explicitamente é um método muito melhor arquiteturamente e não causa problemas com minificadores.

0 commit comments

Comments
 (0)