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

Bac*_*cko 42 javascript jquery dom window

(也许)我刚刚通过在JavaScript 对象中"存储"/"保存"变量解决我的问题(如何在从对话框窗口成功提交表单之后更新前端内容?)window.但是,由于我是JavaScript的新手,我有一些疑问,如果在JavaScript window对象中存储/保存变量是使用该对象的"常见"/"正确"方式.是吗?

例如,使用以下代码

$('.trigger').click(function() {
  window.trigger_link = this;
});
Run Code Online (Sandbox Code Playgroud)

是明智的吗?

Bla*_*ger 75

在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
Run Code Online (Sandbox Code Playgroud)

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


J.D*_*.D. 6

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

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

var Application = {};
Application.state = { name: 'Application' }
.
.
Run Code Online (Sandbox Code Playgroud)

我在javascript中找到的最佳模式是使用Redux来具有全局状态。

  • 您能描述窗户什么时候被冻结吗? (2认同)