2010-01-22 86 views
2

我似乎無法找到關於「網絡的任何地方這一個答案......將函數參數重新聲明爲變量?

是否有任何理由,優勢或劣勢重新聲明函數的參數與局部變量?

例子:

function(param1, param2) { 
    var param1, param2; 
    ...etc... 
} 

顯得無比多餘的給我,但也許我失去了一些東西......?

感謝,

布賴恩

+0

是Javascript嗎?順便說一句,好的暱稱。 – thomaspaulb 2010-01-22 04:58:35

+0

哈哈,謝謝!是的,這是JS。 :) – DondeEstaMiCulo 2010-01-22 05:04:56

回答

3

如果聲明的變量的名稱是相同的人作爲函數參數,那麼它絕對不會做任何事情。 完全沒有價值。甚至不改變變量的值。

+0

這也是我的想法。我正在清理別人的代碼,我無法想出任何必要或甚至有用的理由。你幾乎證實了我的懷疑,謝謝。 – DondeEstaMiCulo 2010-01-22 04:58:14

+0

@trinithis - 你知道這個答案是否適用於所有主流瀏覽器? – nnnnnn 2012-02-06 06:35:19

+0

我會這樣認爲的。我很難相信即使是一個蹩腳的瀏覽器也會犯這個錯誤。 – 2012-02-08 07:40:09

0

通常這是不必要的,但它可以在某些情況下是有用的。

幾個例子:

如果修改函數那些變量的值,但需要知道什麼原始值後來在功能,你會做得很好,已經取得了拷貝了面前。

有時在聲明中有一個非常具有描述性的名稱很方便,如first_integer_in_product_list,但是在函數內部編寫代碼時寧可使用i

+0

OP詢問重新聲明變量,而不是重新分配一個新的值。 – 2010-01-22 04:48:30

+0

是的,他們沒有複製或分配方便的變量名稱,他們只是使用'var'來重新聲明,沒有值。 – DondeEstaMiCulo 2010-01-22 05:00:33

2

沒有很好的理由重新聲明與參數具有相同名稱的局部變量。大多數語言都不會允許這樣做,但JavaScript幾乎允許任何事情。

1

當用戶沒有在函數調用中傳遞任何東西時,這將會很有用。

例如

function X(param1, param2){ 
    param1 = param1 || 1; //set default values if param1 is nothing 
    param2 = param2 || {}; 
} 

,但在你的榜樣,已覆蓋函數的參數,所以這將是就像

function X(){ 
    var param1, param2; 
    ... 
} 
+0

OP使用var關鍵字。 – 2010-01-22 04:51:20

+0

是的,但我的示例不需要var關鍵字,因爲它們在函數參數中是拖拉的。 – YOU 2010-01-22 05:00:02

+0

也有人將問題傳遞給函數的值! – 2010-01-22 07:01:29

0

它不會傷害任何東西,除非你需要像牆壁上的東西那樣做一些事情,比如馬克的答案應該避免。它會導致可讀性較差的代碼,如果您不注意變量作用域,或者如果您忘記了名稱,它可能會爲意大利麪條倉庫做出選擇。

0

你應該在帖子中提到你正在談論的語言,如果他們有相同的名字,那麼在大多數情況下這將是一個錯誤。我認爲以某種語言能夠這樣做的最可能的原因是改變它的範圍,比如使其持續時間保持靜態而不是在函數完成時立即銷燬。

+0

我很抱歉,在這種情況下的確是JavaScript。 在我的示例中使用'var'不會更改範圍AFAIK。這些變量甚至不在任何地方使用,也不會複製到其他任何地方。我在代碼中看到了這一點,所以我開始懷疑這是否是某種不成文的「詭計」......) – DondeEstaMiCulo 2010-01-22 05:02:54