Docs 主页 → 查看和分析数据 → MongoDB Shell
代码范围
在此页面上
当 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()
函数。