Javascript 在不同的函数中使用let变量

Javascript 在不同的函数中使用let变量,javascript,jquery,function,ecmascript-6,Javascript,Jquery,Function,Ecmascript 6,在我的应用程序中,我需要在某处存储全局变量,该变量将仅由一个方法使用。我正在使用前端javascript(jquery) 我的代码如下所示: $(function () { let myVar; // ... }; // and method function foo() { if (!myVar) { // calculate myVar } // do something with myVar and update its value }

在我的应用程序中,我需要在某处存储全局变量,该变量将仅由一个方法使用。我正在使用前端javascript(jquery)

我的代码如下所示:

$(function () {
    let myVar;
    // ...
};

// and method
function foo() {
   if (!myVar) {
      // calculate myVar
   }

   // do something with myVar and update its value
}
问题是我无法在该方法中看到myVar。我还尝试使用localStorage和sessionStorage。但当我刷新页面时,仍然设置了值。我需要在页面刷新后计算新值,而不使用上一个值


在我的例子中,存储变量的最佳实践是什么?谢谢您的建议。

您可以为窗口对象分配属性。这在浏览器上下文中起作用

window["myVar"] = "myValue";

let关键字具有块作用域-在其代码块(函数、循环、条件等)之外无法访问它。您应将其直接指定给窗口对象:

window["myVar"] = "A value";

关于@Vlandu lonuts post的进一步信息:


window.myVar
意味着您的变量被声明在全局范围的最顶端。这意味着您的任何JavaScript代码都可以访问此变量

window.myVar=“value”
什么是最佳实践
在window global上存储肯定不是最佳实践。这取决于具体情况,最好的方法是使用模块加载器,您可以将全局变量存储在模块中。在您的示例中,您甚至可以通过将
foo
函数放在jQuery回调函数中来使用作用域。
var
具有函数作用域,因此在OP的示例中,如果您将
let
更改为
var
,则没有区别。哦,是的,忘记了这一点。