문서 메뉴

문서 홈보기 & 데이터 분석MongoDB Shell

코드 범위 지정

이 페이지의 내용

  • 예시: 범위 제한

JavaScript가 mongosh 에 로드되면 const, varlet 로 정의된 최상위 함수 및 변수가 전역 범위에 추가됩니다.

다음 코드를 고려하세요.

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, loadedFlagunloaded 가 함수 isSnippetLoaded() 과 함께 글로벌 범위에 추가됩니다.

다른 코드에 정의된 함수 및 변수와의 충돌을 방지하려면 스크립트를 작성할 때 범위를 고려하세요. MongoDB는 코드를 래핑하여 범위를 제한하는 것을 권장합니다. 이렇게 하면 전역 범위에서 비슷한 이름의 요소와 우발적인 범위 충돌을 방지할 수 있습니다.

함수와 변수를 전역 범위에서 벗어나게 하는 한 가지 방법은 다음과 같이 코드를 래핑하는 것입니다.

'use strict';
(() => {
...
})()

use strict; 스크립트에서 사용하기 위한 것입니다. mongosh 콘솔에 직접 use strict; 을 입력하면 mongoshstrict 데이터베이스로 전환됩니다.

다음 코드 샘플을 비교합니다. 두 항목은 매우 유사하지만 두 번째 항목은 변수 범위를 제한하는 방식으로 작성되었습니다.

샘플 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() 함수에는 직접 액세스할 수 없습니다.

← require()와(과) load()의 차이점

이 페이지의 내용