1

特别考虑到 js 和 jquery 的使用,试图整理一些一般性的东西。正在通过 stackoverflow 阅读数百万个答案,却没有清楚地了解如何将数据传递给另一个函数以及我们如何构建应用程序。

我得到了非常常见的模式:

$(document).ready(function){

   $('.classname').click(function() { 
      var varone = $(this).attr('name');
   });

   $('.class2name').click(function(){
      var vartwo = $(this).height();
   });

});

然后我从 (document).ready 出去,想做一些处理,比如

    function dosmth() {
       var freaksum = varone + vartwo;
    }

我怎么做?我想传递对象,而不是制作全局变量。

处理此类开发大型应用程序的做法是什么?我想要一些函数,它使用来自其他函数的大量变量进行大量操作。如何在我的操作功能中获取所有这些对象?如果我必须在单个函数中而不是在几个不同的函数中使用这些变量怎么办,比如

function dosmth() {
   var freaksum = varone + vartwo;
}

function dosmthelse() {
   var freakmult = varone * vartwo;
}

等等等等

抱歉拖了这么久,谢谢。

4

1 回答 1

1

在您当前的示例中,您的两个函数dosmthdosmthelse没有对变量的任何访问权限varonevartwo因为它们不存在于同一范围内。解决此问题的唯一一种方法是使这些变量存在于单击事件和函数都可用的范围内。

最简单的方法是简单地将它们设为全局。

var varone, vartwo;

$(document).ready(function){
   $('.classname').click(function() { 
      varone = $(this).attr('name');
   });

   $('.class2name').click(function(){
      vartwo = $(this).height();
   });
});
function dosmth() {
   var freaksum = varone + vartwo;
}

function dosmthelse() {
   var freakmult = varone * vartwo;
}

然而,通常最好不要使用全局作用域,所以我们可以这样做:

(function($){
    var varone, vartwo;
    $(document).ready(function){
       $('.classname').click(function() { 
          varone = $(this).attr('name');
       });

       $('.class2name').click(function(){
          vartwo = $(this).height();
       });
    });
    function dosmth() {
       var freaksum = varone + vartwo;
    }

    function dosmthelse() {
       var freakmult = varone * vartwo;
    }
})(jQuery);

现在您没有任何全局变量,它们仍然可以在两个地方访问。

您还可以(根据您的情况)将这些值存储在其他地方,例如元素上。

如果没有更多关于你试图解决的现实情况的信息,那就是我能做到的。

于 2012-07-11T20:59:11.290 回答