gpt4 book ai didi

javascript - 使用 let 变量而不是使用全局变量

转载 作者:数据小太阳 更新时间:2023-10-29 06:14:34 24 4
gpt4 key购买 nike

我听说在 JavaScript 中使用全局变量是不好的。由于 let 是 block 作用域的,我可以在包含所有其他函数的 block 中使用它并以与全局变量类似的方式使用它吗?

{
var b = 10;
let c = 20;
function foo(){
return c;
}
}

最佳答案

是的,您可以,但需要注意(见下文)。在您的示例中,b 是全局的,但 c 不是。

请注意,该代码中的 foo 是松散模式下的全局变量,因此如果您要这样做,请在顶部使用 "use strict";你的代码。

另请注意,并非所有浏览器都正确支持 let、 block 中的函数声明等的 ES2015 语义。

要支持尚不兼容的旧浏览器,您可以使用旧方法:作用域函数:

(function() {
var b = 10;
var c = 20;
function foo(){
return c;
}
})();

那里,bc 都是局部的,而不是全局的,即使我为它们使用了 var

当然,支持旧浏览器的另一种选择是使用转译器,例如 Babel ,并让它生成与 ES5 兼容的代码(并包含必要的 polyfill)。对于像 IE8 这样真正过时的浏览器(遗憾的是它在某种程度上仍然存在),您可能需要它来输出 ES3 代码(并且您将需要更多的 polyfill)。

(即使有作用域功能,严格模式对于其他事情仍然很方便,例如取消 The Horror of Implicit Globals [披露:这是我贫血的小博客上的一篇文章]。)

在这两种情况下,一个作用域 block 或一个作用域函数,你最终得到的变量对于你的代码(在作用域 block /函数内)来说是有效的全局变量,但不是真正的全局变量和所以不要有一些真正的全局变量所具有的问题,例如以意想不到的方式与内置冲突(例如浏览器中全局范围内的 name,即使您分配了一个字符串,它也始终是一个字符串它的编号或函数——因为它是 window.name,窗口的名称)。

关于javascript - 使用 let 变量而不是使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45648776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com