2011-09-12 158 views
0

我有一个功能,看起来完全是这样的:Javascript名称冲突?

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); 

现在它就像预期。

回答

1

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

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

在此寻找可以很明显看出grid.getGridParam()(不管它是什么)是问题的原因。调试(可能通过打印selectedRows)并进行调查。

selectedRows在本地函数内部声明,所以即使有一个全局变量名称相同,它也不会影响你的函数。

1

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

  • 作用域功能
  • 改写空数组

所以:

每次我跑这个函数的数组随着至少一个项目(我添加到它的末尾)而增长。这肯定意味着我在系统中的其他地方有另一个同名的数组,对吧?

既然你然后再覆盖阵列(这使得创建与new Array()无非就是带宽和周期的浪费更多的阵列)与selectedRows = grid.getGridParam('selarrrow');号,它是最有可能被不断增加。

+0

你说什么是有道理的,但我怎么能影响电网的回报价值? –

+0

...通过编辑它的源代码 – Quentin