Página inicial do Docs → Visualizar & analisar dados → MongoDB Shell
Escopo do código
Nesta página
Quando o JavaScript é carregado no mongosh
, as funções de nível superior e variáveis definidas com const
, var
e let
são adicionadas ao escopo global.
Considere o seguinte código:
const SNIPPET_VERSION = "4.3.2"; var loadedFlag = true; let unloaded = false; function isSnippetLoaded(loadedFlag) { return ( loadedFlag ? "Snippet is loaded" : "Snippet is not loaded" ) }
As variáveis SNIPPET_VERSION
, loadedFlag
e unloaded
são adicionadas ao escopo global junto com a função isSnippetLoaded()
.
Para evitar colisões com funções e variáveis definidas em outro código, certifique-se de considerar o escopo ao escrever scripts. Como prática recomendada, o MongoDB recomenda encapsular seu código para limitar o escopo. Isso protege contra colisões acidentais de escopo com elementos nomeados de forma semelhante no escopo global.
Uma maneira de manter funções e variáveis fora do escopo global é encapsular seu código da seguinte maneira:
;(() => { ... })()
Dica
Exemplo: restrição de escopo
Compare as seguintes amostras de código. Elas são muito semelhantes, mas o segundo é escrito de uma forma que restringe o escopo da variável.
Amostra 1: escopo irrestrito.
let averageGrossSales = [ 10000, 15000, 9000, 22000 ]; const Q1_DISCOUNT = .10; const Q2_DISCOUNT = .15; const Q3_DISCOUNT = .06; const Q4_DISCOUNT = .23; function quarterlySales(grossAmount, discount ) { return grossAmount * discount ; } function yearlySales() { let annualTotal = 0; annualTotal += quarterlySales(averageGrossSales[0], Q1_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[1], Q2_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[2], Q3_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[3], Q4_DISCOUNT ); return annualTotal ; }
Amostra 2: escopo restrito.
(() => { let averageGrossSales = [ 10000, 15000, 9000, 22000 ]; const Q1_DISCOUNT = .10; const Q2_DISCOUNT = .15; const Q3_DISCOUNT = .06; const Q4_DISCOUNT = .23; function quarterlySales(grossAmount, discount ) { return grossAmount * discount ; } globalThis.exposedYearlySales = function yearlySales() { let annualTotal = 0; annualTotal += quarterlySales(averageGrossSales[0], Q1_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[1], Q2_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[2], Q3_DISCOUNT ); annualTotal += quarterlySales(averageGrossSales[3], Q4_DISCOUNT ); return annualTotal ; } } )()
Na Amostra 2, os seguintes elementos têm escopo dentro de uma função anônima e são todos excluídos do escopo global:
A função principal,
yearlySales()
A função de auxiliar,
quarterlySales()
As variáveis
A declaração de atribuição globalThis.exposedYearlySales = function yearlySales()
adiciona exposedYearlySales
ao escopo global.
Quando você chama exposedYearlySales()
, ele chama a função yearlySales()
. A função yearlySales()
não está diretamente acessível.