AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

コードのスコープ

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 つは、次のようにコードをラップすることです。

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

Tip

use strict; は スクリプトで使用されます。 mongoshコンソールにuse strict;を直接入力すると、 mongoshはstrictというデータベースに切り替えられます。

次のコード サンプルと比較してください。 これらは非常によく似ていますが、2 番目の は変数のスコープを制限する方法で記述されています。

サンプル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()関数には直接アクセスできません。

このページを評価