javascript/jquery中全局变量的替代方案?

javascript/jquery中全局变量的替代方案?,javascript,jquery,Javascript,Jquery,所以,我的应用程序开始工作了。但我不想使用全局变量 以下是我想做的: var AMLid; $(".commentButton").on('click', function () { AMLid = $(this).closest('tr').siblings().find('p.important').text(); alert("id is:" + AMLid); }); $(".saveButton").on("click", function () { $(".mod

所以,我的应用程序开始工作了。但我不想使用全局变量

以下是我想做的:

var AMLid;
$(".commentButton").on('click', function () {
  AMLid = $(this).closest('tr').siblings().find('p.important').text();
  alert("id is:" + AMLid);
});

$(".saveButton").on("click", function () {
     $(".modal-body #txtAddComment").val(AMLid);
});
我想从选定的表行中获取一个ID,并将该ID传递给模式对话框,这样我就可以在单击模式对话框中的按钮时使用该ID作为参数

我如何做完全相同的事情,而不使用全局变量?可能吗

使用这样的全局变量的缺点是什么?如果很多人同时使用它,它是否会崩溃或指向错误的ID


非常感谢您的帮助。

您可以将整个过程封装在一个函数中

 (function(){
    var AMLid;
    $(".commentButton").on('click', function () {
       AMLid = $(this).closest('tr').siblings().find('p.important').text();
       alert("id is:" + AMLid);
    });

    $(".saveButton").on("click", function () {
        $(".modal-body #txtAddComment").val(AMLid);
    });
})();

Javascript是客户端的,所以实际上我不能理解你的“很多人同时使用它”的意思。为用户提供一个浏览器,所以您不必担心多个客户端。每个人都使用自己的一组全局变量

如果您的执行没有以任何方式链接(它们是“onclick”),您可以将它们包装在一个函数中,以便实际设置一个“局部/全局”变量。
每个需要AMLid的函数都必须在该函数作用域内声明。

您可以通过使用立即调用的Functon表达式来避免使用全局变量,如下所示:

(function() {
    var AMLid;
    $(".commentButton").on('click', function () {
      AMLid = $(this).closest('tr').siblings().find('p.important').text();
      alert("id is:" + AMLid);
    });

    $(".saveButton").on("click", function () {
         $(".modal-body #txtAddComment").val(AMLid);
    });
})();
这是因为
AMLid
现在是函数私有的;当函数被执行时,它会创建一个新的执行上下文,其中包含该变量,然后该变量可以被函数中的语句访问,但不能被函数外部的语句访问。因为这会创建一个闭包,所以附加到这些函数的回调函数可以继续访问该变量。此外,由于函数是匿名的,因此它本身没有名称空间

术语
立即调用funcon Expression
来自Ben Alman,您可以在这里阅读他最初的博客文章,讨论这个概念:


使用全局变量的一些缺点包括:难以跟踪变量,其他脚本可能会弄乱它的值(当它们可能不应该访问它时),更难维护,代码不太干净。如果有多人使用它,您担心它会被覆盖不会成为问题,因为它是客户端的,因此在任何给定的浏览器中,每页都会加载一个实例。

将变量包装到函数中是将变量排除在全局范围之外的唯一方法。如果这是您在这个特定模块中使用的所有代码,那么它实际上并没有什么区别

额外好处:如果你在代码的开头添加
$
,你会得到一个(简写的)jQuery文档就绪处理程序,因此代码在HTML中的位置无关紧要。无法编辑,但忘了在我之前的评论中说,你还需要从结尾删除
()
;你不想要生活,只需要一个普通的函数调用。这正是我想要的,尽管我自己不知道,非常感谢:我很高兴我能做到help@AnthonyGrist也谢谢你提供更多信息,很高兴知道+1
如果很多人同时使用它,它是否会崩溃或指向错误的ID?
-否,此变量存储在客户端的浏览器中,因此对于每个使用它的人,变量是“他们自己的”@chiapa+1,谢谢!知道这一点很好。但是,一个页面上可以运行多个脚本,如果使用相同的变量名,则可能会遇到问题。这在多个JavaScript框架中最容易看到,这些框架与jQuery一样,使用
$
作为其功能的简写。