当突然被一个问题击中时,我正在循环。
这应该是“正确的方式”:

    // code..
    $('tr','#my_table').each(function(){
        $(this).click(function(){
            var show_id = $(this).attr('data-show-id');
            // code..
            // code..
        });
    });
    // code..

或者
    // code..
    var show_id = 0; /* HERE */
    $('tr','#my_table').each(function(){
        $(this).click(function(){
            show_id = $(this).attr('data-show-id');
            // code..
            // code..
        });
    });

在第一个示例中,我为每个 tr 创建了一个新变量 show_id
在第二个中,我对表中的所有 show_id 使用相同的全局 tr ,并在每个 tr 上重新填充它。

所以问题是:不管编程语言 - 在每个循环中创建一个新变量是更好的做法,该变量在函数退出时释放或“捕获”整个运行的内存并避免每次重新创建变量?

最佳答案

该变量不是在循环期间创建的。它仅在事件处理程序中需要,它将自行执行。将变量(仅在内部需要时)移到外部存在三个问题:

  • 访问更高范围的变量会慢一点
  • 垃圾收集不收集值(不节省内存)
  • 当事件处理程序中的异步行为访问变量但处理程序被多次调用时,
  • 可能出现问题

  • 第二点也是你问题的答案:



    一直浪费内存几乎没有意义,创建函数作用域很快。将声明从变量的使用中移开可能被认为是不好的做法,将它移到不同的范围甚至会引入错误。

    如果您在具有大内存的机器上运行并且创建/删除对象(对于所有处理程序保持不变)很慢,那么预分配内存将是有意义的。

    关于javascript - 使用变量的正确方法 - 在函数循环内部或外部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17947108/

    10-09 17:41
    查看更多