在 JavaScript“窗口”对象中存储变量是使用该对象的正确方法吗?

新手上路,请多包涵

(也许)我刚刚解决了我的问题( 如何在从对话框窗口成功提交表单后更新前端内容? )通过在 JavaScript 中“存储”/“保存”变量 window 目的。但是,由于我是 JavaScript 方面的新手, _我怀疑在 JavaScript window 对象中存储/保存变量是否是使用该对象的“常见”/“正确”方式_。是吗?

例如,使用下面的代码

$('.trigger').click(function() {
  window.trigger_link = this;
});

可取吗?

原文由 Backo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 273
2 个回答

在 JavaScript 中,任何全局变量实际上都是 window 对象的一个属性。使用一个等同于(并且可以互换)使用另一个。

使用全局变量当然是“常见的”,所以问题是它是否“合适”。 通常,不鼓励使用全局变量,因为它们可以从任何函数访问,并且您冒着让多个函数尝试读取和写入相同变量的风险。 (对于任何环境中的任何编程语言都是如此,不仅仅是 JavaScript。)


通过 为您的应用程序创建一个唯一的命名空间来 解决这个问题。最简单的方法是创建一个具有唯一名称的全局对象,并将变量作为该对象的属性:

 window.MyLib = {}; // global Object container; don't use var
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }

MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7


另一种方法是使用 .data() 将变量附加到相关的 DOM 元素。这并非在所有情况下都实用,但这是获取可全局 访问 的变量而无需将它们留在全局命名空间中的好方法。

原文由 Blazemonger 发布,翻译遵循 CC BY-SA 3.0 许可协议

这里实际上没有提到什么,并且可能是 为什么不使用 window 作为全局范围载体 的最大交易破坏者是它在某些情况下 可以被冻结(不可写)(我是从基于生产的经验)。

一个好的模式实际上只是创建一个全局变量,它将用于您应用程序中的所有常见内容

var Application = {};
Application.state = { name: 'Application' }
.
.

我发现在 javascript 中对我来说最好的模式是使用 Redux 拥有一个全局状态。

原文由 J.D. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题