(也许)我刚刚通过在JavaScript window
对象中“存储”/“保存”变量解决了我的问题(How to update front-end content after that a form is successfully submitted from a dialog window?)。但是,由于我是JavaScript的新手,我有一些疑问,如果在JavaScript window
对象中存储/保存变量是使用该对象的“常见”/“正确”方式 。是吗?
例如,使用以下代码
$('.trigger').click(function() {
window.trigger_link = this;
});
是可取的吗?
答案 0 :(得分:67)
在JavaScript中,任何全局变量实际上都是window
对象的属性。使用一个相当于使用另一个(并且可以互换)。
使用全局变量肯定是“常见的”,所以问题在于它是否“正确”。 Generally, global variables are discouraged,因为可以从任何函数访问它们,并且您可能有多个函数试图读取和写入相同的变量。 (任何环境中的任何编程语言都是如此,而不仅仅是JavaScript。)
通过创建a namespace unique to your application解决此问题。最简单的方法是创建一个具有唯一名称的全局对象,并将您的变量作为该对象的属性:
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元素。这在所有情况下都不实用,但它是获取可以全局访问的变量的好方法,而不会将它们留在全局命名空间中。
答案 1 :(得分:4)
这里实际上没有提到什么,并且可能是为什么不使用的最大交易突破 window
作为全球范围运营商的原因是它在某些情况下可能会被冻结(不可写)(我是从基于生产的经验出发)。
一个好的模式实际上是创建一个全局变量,该变量将用于应用程序中的所有常见内容
var Application = {};
Application.state = { name: 'Application' }
.
.
我发现在javascript中对我来说最好的模式是使用Redux建立全局状态。
答案 2 :(得分:1)
在应用程序中创建唯一命名空间的另一种模式。
function myApp()
{
var value = 5;
function addToValue(x)
{
value += x;
}
}()
如果您希望以后可以访问函数/值,可以将它们存储在如下对象中:
function myApp()
{
this.value = 5;
this.addToValue = function(x)
{
this.value += x;
}
}
var myInstance = new myApp();