Javascript名称冲突?

时间:2011-09-12 12:48:39

标签: javascript debugging

我有一个看起来完全像这样的函数:

function exportSelectedToExcel(id)
{
    var selectedRows = new Array();

    //Retrieve selected items from the grid
    selectedRows = grid.getGridParam('selarrrow');

    //Always add the item in id, it doesn't matter if it's there twice.
    selectedRows[selectedRows.length] = id;

    //Build the url
    var params = selectedRows.join("&id="); 
    var exportUrl = "/Export/SelectListExporters?id=" + params;

    //Show the selection form
    SelectionWindow.show(exportUrl, "#selectionForm", 400);
}

每次运行此函数时,数组都会增加至少一个项目(我添加到它的末尾)。这肯定意味着我在系统中的其他地方有另一个同名的数组,对吗?

google chrome或firefox中是否有任何方法可以找出该变量的位置?

编辑:整个项目中没有这样的变量,从视觉工作室内验证。

编辑2:这就是我所说的:http://www.secondpersonplural.ca/jqgriddocs/_2eb0fb79d.htm

编辑3:我已将代码更改为以下内容开头:

var retrievedRows = grid.getGridParam('selarrrow');
var selectedRows = retrievedRows.slice(0);

现在它的工作方式与预期一致。

3 个答案:

答案 0 :(得分:1)

每次调用该函数时,数组都是:

  • 支持功能
  • 用空数组覆盖

所以:

  

每次运行此函数时,数组都会增加至少一个项目(我添加到它的末尾)。这肯定意味着我在系统中的其他地方有另一个同名的数组,对吗?

没有

由于您再次使用new Array()覆盖数组(这使得使用selectedRows = grid.getGridParam('selarrrow');创建数组只不过是浪费带宽和周期),因此很可能正在增长。

答案 1 :(得分:1)

首先,您的代码可以简化为:

var selectedRows = grid.getGridParam('selarrrow');
selectedRows.push(id);

看着这一点很明显,grid.getGridParam()(无论它是什么)是导致问题的原因。调试它(可能通过打印selectedRows)并进行调查。

selectedRows在函数内部声明,因此即使有一个名为相同的全局变量,它也不会影响你的函数。

答案 2 :(得分:0)

Firefox的Firebug插件可能会帮助您: https://addons.mozilla.org/firefox/addon/firebug/

使用Firebug,您可以在网页中实时调试Javascript变量。