Javascript 在DOM中构建全局变量

Javascript 在DOM中构建全局变量,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我正在开发一个应用程序,其中大量使用AJAX调用将部分MVC视图导入到DOM中 我注意到一些奇怪的零星行为,变量会失去它们的状态。 我希望有人能帮我证实我对为什么会发生这种情况的怀疑 我有以下部分观点: JS: ——开始脚本标记 var1=1; VarVar2=2; var-manager=null; $(文档).ready(函数() { //做事 经理=新经理(); }); --结束脚本标记 局部视图中的标记 如果用户单击一个按钮,部分视图会一次又一次地导入到我的dom中。它每次都插入到同一

我正在开发一个应用程序,其中大量使用AJAX调用将部分MVC视图导入到DOM中

我注意到一些奇怪的零星行为,变量会失去它们的状态。 我希望有人能帮我证实我对为什么会发生这种情况的怀疑

我有以下部分观点: JS:

——开始脚本标记
var1=1;
VarVar2=2;
var-manager=null;
$(文档).ready(函数()
{
//做事
经理=新经理();
});
--结束脚本标记
局部视图中的标记
如果用户单击一个按钮,部分视图会一次又一次地导入到我的dom中。它每次都插入到同一个元素中,每次都会有效地覆盖自身。 但我的问题是:多次将此部分加载到DOM中是否会导致脚本块多次添加到我的DOM中?每次将部分视图拉入DOM时,JS是否会落后一次

脚本已经大大简化,但一个例子是,即使在初始化之后,管理器也可以为null。我猜DOM中可能有多个实例


似乎我可以通过将整个JS块包装在一个自调用闭包中来解决这个问题,但我不确定这是否有必要。。。我想知道是否有人能很好地解释为什么需要关闭。我的理论是,它可以防止在DOM中建立多个版本的局部视图脚本块…

添加一个由单个自调用闭包组成的脚本不会在全局命名空间中引入新变量,它只定义一个函数,然后调用它,然后立即忘记它,因为它没有外部引用


另一方面,每次导入局部视图时,它都会在全局命名空间中引入
var1
var2
manager
,覆盖以前的定义。这也许可以解释你所经历的零星变量行为。

是的,我认为这就是问题所在。像管理器这样的对象将在整个执行过程中改变状态(被初始化等),似乎闭包是正确和安全的方法应该可以很好地作为一个闭包。但是,可以安全地假设var1和var2每次都会被覆盖。是否存在重复的可能性?@TGH,全局范围内的重复?否。在该范围中定义的名称映射到
窗口
对象的属性。进一步的定义将覆盖以前的定义,但这是否类似于在两个不同的位置(每次插入DOM时)声明两个同名的变量。很难理解,如果变量被覆盖,为什么我需要闭包。。我有一个适当的措施,不允许再次加载视图,直到上一个完成。。。
--begin script tags
var var1 = 1;
var var2 = 2;
var manager = null;    

$(document).ready(function() 
{
  //Do stuff
  manager = new Manager();
});
--End script tag

<div>
Markup in partial view
</div>