在 DOM 中构建全局变量

Build up of global variables in the DOM

本文关键字:全局变量 构建 DOM      更新时间:2023-09-26

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

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

例如,我有以下部分观点:.JS:

--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>

如果用户单击按钮,部分视图会一遍又一遍地导入到我的 dom 中。它每次都插入到同一个元素中,每次都有效地覆盖自身。我的问题是:多次将此部分加载到 DOM 中会导致脚本块多次添加到我的 DOM 中吗?每次将部分视图拉入 DOM 时,JS 是否会落后一次?

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

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

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

另一方面,分部视图在每次导入全局命名空间时都会在全局命名空间中引入 var1var2manager,从而覆盖以前的定义。这可以解释您遇到的零星变量行为。