코드 범위 지정
이 페이지의 내용
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()
함수에는 직접 액세스할 수 없습니다.