JavaScript 가 mongosh 에 로드되면 const, var 및 let 로 정의된 최상위 함수 및 변수가 글로벌 범위에 추가됩니다.
다음 코드를 고려하세요.
const SNIPPET_VERSION = "4.3.2"; var loadedFlag = true; let unloaded = false; function isSnippetLoaded(loadedFlag) { return ( loadedFlag ? "Snippet is loaded" : "Snippet is not loaded" ) }
변수 SNIPPET_VERSION, loadedFlag 및 unloaded 가 함수 isSnippetLoaded() 과 함께 글로벌 범위에 추가됩니다.
다른 코드에 정의된 함수 및 변수와의 충돌을 피하려면 스크립트를 작성할 때 범위를 고려해야 합니다. MongoDB는 코드를 래핑하여 범위를 제한하는 것을 권장합니다. 이렇게 하면 전역 범위에서 비슷한 이름의 요소와 우발적인 범위 충돌을 방지할 수 있습니다.
함수와 변수를 전역 범위에 넣지 않는 한 가지 방법은 코드를 다음과 같이 래핑하는 것입니다.
; (() => { ... })()
예시: 범위 제한하기
다음 코드 샘플을 비교합니다. 두 항목은 매우 유사하지만 두 번째 항목은 변수 범위를 제한하는 방식으로 작성되었습니다.
샘플 1: 무제한 범위입니다.
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 ; }
샘플 2: 제한된 범위.
(() => { 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 ; } } )()
샘플 2 에서 다음 요소는 모두 익명 함수 내에서 범위가 지정되며 전역 범위에서 모두 제외됩니다.
주요 기능,
yearlySales()헬퍼 함수,
quarterlySales()변수
globalThis.exposedYearlySales = function yearlySales() 할당 문은 전역 범위에 exposedYearlySales를 추가합니다.
exposedYearlySales()를 호출하면 yearlySales() 함수가 호출됩니다. yearlySales() 함수에는 직접 액세스할 수 없습니다.