2011-09-12 43 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