2011-08-04 25 views
0

最近,我發現自己將函數參數附加到函數作用域內的變量,以便每次使用它時都不引用該參數。JavaScript - 引用函數內的參數

這種做法有什麼好處嗎?

例如:

function populateResultCount(count){ 
    var count = count; 
    return $('.resultCounter').text(count);  
}; 

很容易被重新編寫,像這樣:

function populateResultCount(count){ 
    return $('.resultCounter').text(count);  
}; 

會仍正常工作。

+1

JavaScript函數將參數的值和局部變量的值存儲在同一位置('Variables'對象 - 至少它是ES3中的回調方式),所以檢索參數的值沒有區別vs檢索局部變量的值。 –

回答

1

如果您不使用傳入的參數,則沒有區別。在第一個示例中,由於var count = count,您可能會混淆未來的維護者,即您聲明的變量與參數具有相同的名稱,這不是最佳實踐。

所以,如果可以的話,使用你的第二種形式。它的意圖更清晰,沒有混淆的餘地。

3

這兩者之間沒有功能差異。去更簡單的版本。

1

我看不出有什麼好處,除非您以某種方式操縱數據。您的變量沒有額外的賦值功能,仍然無法在功能外訪問。

1

所有其他答案都是正確的:沒有理由在函數中「重新賦值」傳遞的參數。

我能想到的,在這裏你最好別惹重新分配參數的唯一的事情,就是如果你有可選參數/默認值

function xyz(optionalArgument) { 
    optionalArgument = optionalArgument || "no argument given"; 
    ... 
} 

但在這種情況下,最好能夠把它寫作爲

function xyz(/* optionalArgument */) { 
    var optionalArgument = arguments[0] || "no argument given"; 
    ... 
} 

注意,||伎倆會給你右手邊的值,如果左邊是一個falsy值。即如果你確定與可選的參數是東西是falsy(如明確地傳遞null0,等等),你必須這樣做var arg = typeof arguments[x] === 'undefined' ? defaultValue : arguments[x];

1
function Test (count) { 
    this.increment = function() { 
     count++; 
    } 

    this.getCount = function() { 
     return count; 
    } 
} 

var test = new Test(10); 


<button onclick="test.increment(); alert(test.getCount());">Increment</button> 

你可以做這樣的事情即使有說法。所以我認爲他們是一樣的。