【问题标题】:How to deal with two variables with the same name in different js files?如何处理不同js文件中的两个同名变量?
【发布时间】:2017-01-16 06:12:51
【问题描述】:

我有两个具有相同名称的变量的 javascript 文件,我该如何定义使用哪一个?

【问题讨论】:

  • 您需要使用closure
  • javascript 变量在文件之间共享,这意味着如果您在两个文件中使用相同的变量名,它将是同一个变量。要解决这个问题,您可以使用前缀或 Liam 建议使用闭包
  • 也许你可以试试Namespacing?!
  • 您需要了解@rellyethan 建议的范围

标签: javascript variables var


【解决方案1】:

在 Javascript 中,实际上不能有 2 个具有不同目标的变量,并且在同一个 scope 中具有相同的名称。

基本上,有两种类型的范围:globallocal。全局范围是您在不同文件中创建 2 个具有相同名称的变量所面临的问题。

曾经,这是一个常见问题,开发人员同意尝试制作具有不同范围的文件,并仅在必要和不可避免的情况下使用全局范围。

因此,创建新范围(本地)的最常见方法是在函数中关闭代码。 javascript 中的函数创建了一个新的范围,该范围无法从全局访问,但您仍然可以从本地访问全局范围。

此外,还有 2 种方法可以让您的代码模块化(1 个文件 = 1 个模块):使用 AMDCommonJS 模块。

更多关于范围here

【讨论】:

  • @Liam 好吧,我想过深入解释,但在这一点上我明白那家伙需要一些导师,这在 w3schools 中是最好的理解。但我明白你的意思,我会做出更好的答案。
  • @Liam 我会在答案被删除之前尝试编辑它
  • @Liam 编辑了我的答案以满足最低要求。
  • 一个范围界定的例子会很好。但是为了纠正它而付出的努力做得很好。很多人不这样做!
【解决方案2】:

想象以下场景:

<html>...

<script src="file1.js">var x = "pizza";</script> 
<script src="file2.js">var x = "cheese";</script>
<script src="file3.js">var x = "chocolate";</script>

您的共享变量将始终被它给出的最新值覆盖,在本例中为“巧克力”。

如果你想拆分它们,要么使用前缀,要么考虑更改名称,因为一旦它们被加载到主文件中,它们就在同一个命名空间中。

console.log(x); // chocolate will be printed since it is the last value it was (re)defined as.
</html>

编辑:

如果你想让它工作,最简单的方法是更改​​变量的名称。

<script src="file1.js">var x = "pizza";</script> 
<script src="file2.js">var y = "cheese";</script>
<script src="file3.js">var z = "chocolate";</script>

console.log(x); //pizza
console.log(y); //cheese
console.log(z); //chocolate

【讨论】:

  • 我不确定这有什么帮助?这似乎是问题的说明,而不是解决方案
  • 我提到了他如何解决这个问题,我怀疑是否需要展示如何更改变量的名称。添加了解决方案,但仍然如此。 :)
猜你喜欢
  • 2020-10-30
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 2012-03-21
  • 2013-12-10
相关资源
最近更新 更多