You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/07-new-function/article.md
+9-9
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
2
2
# A sintaxe de "new Function"
3
3
4
-
Existe mais uma maneira de criar uma função. Ela é raramente usada, mas as vezes não existem alternativas.
4
+
Existe mais uma maneira de criar uma função. Ela é raramente usada, mas às vezes não existem alternativas.
5
5
6
6
## Sintaxe
7
7
@@ -29,7 +29,7 @@ let sayHi = new Function('alert("Olá")');
29
29
sayHi(); // Olá
30
30
```
31
31
32
-
A principal diferença de outras formas que vimos é que a função é criada literalmente a partir de uma string, que é passada em tempo de execução.
32
+
A principal diferença de outras formas que vimos é a função ser criada literalmente a partir de uma string, e passada em tempo de execução.
33
33
34
34
Todas as declarações anteriores requeriam de nós, programadores, escrever o código da função dentro do *script*.
35
35
@@ -46,7 +46,7 @@ func();
46
46
47
47
## Closure
48
48
49
-
Normalmente, uma função lembra onde nasceu na propriedade especial `[[Environment]]`. Ele faz referência ao Ambiente Lexical de onde foi criado (abordaremos isso no capítulo <info:closure>).
49
+
Normalmente, uma função lembra onde nasceu na propriedade especial `[[Environment]]`. Ela faz referência ao Ambiente Lexical de onde foi criado (abordaremos isso no capítulo <info:closure>).
50
50
51
51
Mas quando uma função é criada usando `new Function`, seu `[[Environment]]` é definido para fazer referência não ao Ambiente Lexical atual, mas ao ambiente global.
52
52
@@ -82,25 +82,25 @@ function getFunc() {
82
82
getFunc()(); // *!*"teste"*/!*, do escopo léxico de getFunc
83
83
```
84
84
85
-
Essa caracteristica especial de `new Function` parece estranha, mas se apresenta muito útil na prática.
85
+
Essa característica especial de `new Function` parece estranha, mas se apresenta muito útil, na prática.
86
86
87
-
Imagine que nós precisamos criar uma função a partir de uma `string`. O código dessa função é desconhecido 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-lo do servidor ou de outra fonte.
87
+
Imagine que nós precisamos criar uma função a partir de uma `string`. O código dessa função é desconhecido 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 receber do servidor ou de outra fonte.
88
88
89
89
Nossa nova função precisa interagir com o *script* principal.
90
90
91
91
E se você pudesse acessar as variáveis externas?
92
92
93
-
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.
93
+
O problema é que antes de o 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.
94
94
95
-
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 não-inteligente "encontra-e-substitui".
95
+
Por exemplo, se uma função tem uma variável `let userName`, o minificador a 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, por a variável ser 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 não-inteligente "encontra-e-substitui".
96
96
97
97
Portanto, se `new Function` tivesse acesso a variáveis externas, não seria possível encontrar `userName` renomeado.
98
98
99
-
**Se a `nova Função` tivesse acesso a variáveis externas, haveria problemas com minificadores.**
99
+
**Se a `new Function` tivesse acesso a variáveis externas, haveria problemas com minificadores.**
100
100
101
101
Além disso, esse código seria arquitetonicamente ruim e sujeito a erros.
102
102
103
-
Para passar algo para uma função, criada como `nova Função`, devemos usar seus argumentos.
103
+
Para passar algo para uma função, criada como `new Function`, devemos usar seus argumentos.
0 commit comments