使用jQuery .each()时的全局vs本地变量

时间:2011-11-11 01:55:29

标签: javascript jquery

在.each()中执行操作时使用全局变量是否更好/更快?在页面上的许多元素?

$('.myClass').each(function (){
   myC = $(this)
   myH = myC.parent().height();
   myC.height(myH)
}

相反:

$('.myClass').each(function (){
   var myC = $(this)
   var myH = myC.parent().height();
   myC.height(myH)
}

2 个答案:

答案 0 :(得分:3)

除非明确需要全局持久性和全局访问,否则应始终使用局部变量。在这种特殊情况下,您应该使用局部变量(第二个选项)。

如果您感到好奇,在大多数JS引擎中,本地变量的访问速度比全局变量要快一些,因为在其他范围更高之前首先搜索本地范围,但这不是选择本地范围与全局范围的原因。

除非明确要求全局变量,否则始终使用局部变量。然后在使用全局变量时,您必须仔细选择名称,这些名称不会与您的网页或项目或您可能正在使用的任何库中的任何其他内容发生冲突。我将范围几乎所有的全局变量命名为一个对象,以避免与其他全局变量发生冲突。

此外,永远不要像在第一个例子中那样使用显式声明(我称之为偶然)全局变量。如果需要全局变量,请在全局范围内声明它。

如果你需要一个变量来从一个.each()函数调用到下一个,你可以将它定义为一级,但仍然是这样的局部变量:

function myFunction() {
    var maxHeight = 0;
    $('.myClass').each(function (){
       var myC = $(this);
       if (myC.height() > maxHeight) {
           maxHeight = myC.height();
       }
    }
    // maxHeight is set here
}

答案 1 :(得分:2)

使用全局变量永远不会更好或更快,你没有理由这样做,所以不,不要这样做!