javascript - 使用 jQuery .each() 时的全局变量与局部变量

标签 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)
}

最佳答案

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

如果你好奇的话,在大多数 JS 引擎中,局部变量的访问速度比全局变量要快一些,因为先搜索局部作用域,然后再搜索其他更高的作用域,但这并不是选择局部变量还是全局变量的原因。

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

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

如果您需要一个变量从一个 .each() 函数调用中幸存下来,您可以将其定义为上一级,但仍然是一个局部变量,如下所示:

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

关于javascript - 使用 jQuery .each() 时的全局变量与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088803/

相关文章:

javascript - 用javascript增加类

javascript - 如何使用 jQuery 查找#?

jquery - 图像映射不起作用

javascript - 显示在 ReactJS 中显示模态的按钮列表

javascript - Cosmos DB 存储过程中的读取操作是否对数据采取排他锁?

javascript - 找不到模块 chai 尽管它存在于节点模块文件夹中

javascript - 存储一个 php 数组客户端

javascript - 在 d3js 中寻找具有特定投影的世界地图

javascript - 如何从异步调用返回响应?

javascript - 在 JQuery 中克隆 li 元素