我似乎無法找到關於「網絡的任何地方這一個答案......將函數參數重新聲明爲變量?
是否有任何理由,優勢或劣勢重新聲明函數的參數與局部變量?
例子:
function(param1, param2) {
var param1, param2;
...etc...
}
顯得無比多餘的給我,但也許我失去了一些東西......?
感謝,
布賴恩
我似乎無法找到關於「網絡的任何地方這一個答案......將函數參數重新聲明爲變量?
是否有任何理由,優勢或劣勢重新聲明函數的參數與局部變量?
例子:
function(param1, param2) {
var param1, param2;
...etc...
}
顯得無比多餘的給我,但也許我失去了一些東西......?
感謝,
布賴恩
如果聲明的變量的名稱是相同的人作爲函數參數,那麼它絕對不會做任何事情。 完全沒有價值。甚至不改變變量的值。
這也是我的想法。我正在清理別人的代碼,我無法想出任何必要或甚至有用的理由。你幾乎證實了我的懷疑,謝謝。 – DondeEstaMiCulo 2010-01-22 04:58:14
@trinithis - 你知道這個答案是否適用於所有主流瀏覽器? – nnnnnn 2012-02-06 06:35:19
我會這樣認爲的。我很難相信即使是一個蹩腳的瀏覽器也會犯這個錯誤。 – 2012-02-08 07:40:09
通常這是不必要的,但它可以在某些情況下是有用的。
幾個例子:
如果修改函數那些變量的值,但需要知道什麼原始值後來在功能,你會做得很好,已經取得了拷貝了面前。
有時在聲明中有一個非常具有描述性的名稱很方便,如first_integer_in_product_list
,但是在函數內部編寫代碼時寧可使用i
。
OP詢問重新聲明變量,而不是重新分配一個新的值。 – 2010-01-22 04:48:30
是的,他們沒有複製或分配方便的變量名稱,他們只是使用'var'來重新聲明,沒有值。 – DondeEstaMiCulo 2010-01-22 05:00:33
沒有很好的理由重新聲明與參數具有相同名稱的局部變量。大多數語言都不會允許這樣做,但JavaScript幾乎允許任何事情。
當用戶沒有在函數調用中傳遞任何東西時,這將會很有用。
例如
function X(param1, param2){
param1 = param1 || 1; //set default values if param1 is nothing
param2 = param2 || {};
}
,但在你的榜樣,已覆蓋函數的參數,所以這將是就像
function X(){
var param1, param2;
...
}
OP使用var關鍵字。 – 2010-01-22 04:51:20
是的,但我的示例不需要var關鍵字,因爲它們在函數參數中是拖拉的。 – YOU 2010-01-22 05:00:02
也有人將問題傳遞給函數的值! – 2010-01-22 07:01:29
它不會傷害任何東西,除非你需要像牆壁上的東西那樣做一些事情,比如馬克的答案應該避免。它會導致可讀性較差的代碼,如果您不注意變量作用域,或者如果您忘記了名稱,它可能會爲意大利麪條倉庫做出選擇。
你應該在帖子中提到你正在談論的語言,如果他們有相同的名字,那麼在大多數情況下這將是一個錯誤。我認爲以某種語言能夠這樣做的最可能的原因是改變它的範圍,比如使其持續時間保持靜態而不是在函數完成時立即銷燬。
我很抱歉,在這種情況下的確是JavaScript。 在我的示例中使用'var'不會更改範圍AFAIK。這些變量甚至不在任何地方使用,也不會複製到其他任何地方。我在代碼中看到了這一點,所以我開始懷疑這是否是某種不成文的「詭計」......) – DondeEstaMiCulo 2010-01-22 05:02:54
是Javascript嗎?順便說一句,好的暱稱。 – thomaspaulb 2010-01-22 04:58:35
哈哈,謝謝!是的,這是JS。 :) – DondeEstaMiCulo 2010-01-22 05:04:56