validationError([elem1,elem2],type,shiftNo);
var arr = [elem1,elem2];
validationError(arr,type,shiftNo);
我的意思要問的是呼叫認爲是壞的功能(也它有任何性能後果)的方法1。並且就此而言,在參數內部聲明字符串,對象和函數是一種糟糕的方法。
validationError([elem1,elem2],type,shiftNo);
var arr = [elem1,elem2];
validationError(arr,type,shiftNo);
我的意思要問的是呼叫認爲是壞的功能(也它有任何性能後果)的方法1。並且就此而言,在參數內部聲明字符串,對象和函數是一種糟糕的方法。
性能不是問題,不是像JS,Ruby或whatnot這樣的語言。所以我們所能做的就是考慮代碼的可讀性。這個案例與JS並沒有很強的關聯,所以這將是我的例子。
move = ["E2", "E4"];
if chessboard.valid(move, player) {
...
}
此明確指出:「如果移動(E2 E4)的有效期爲這個棋盤,然後......」,你甚至不需要看文檔就知道。如果我們寫了不分配我們的陣列的名稱,結果看起來有點神祕(仍然很容易猜到,但更難這樣一個小例子):
if chessboard.valid(["E2", "E4"], player) {
...
}
這是什麼意思? valid
代表什麼?也許,這是問這些單元格是否包含有效玩家的棋子?這是一個設計缺陷,更確切地說是錯誤的命名。它對如何使用棋盤代碼做出了大膽的假設。我們可以明顯地表明這陣代表通過重命名chessboard
的方法一招:
if chessboard.valid_move(["E2", "E4"], player) {
...
}
這是更好的,但你可能沒有一個API,使你的代碼留下膾炙人口沒有一些額外的命名。
所以,我建議一個經驗法則:
感謝您的比喻......不能要求更好的解釋.... – 2015-02-06 16:51:34
確實沒有什麼區別。無論哪種方式,你創建一個JavaScript數組,它基本上是一個對象並獲得一個參考作爲回報(你傳遞給你的方法)。如果您不需要在代碼中稍後訪問該數組(或其他數據),則第二種方法是完全正確的。
嗯...我知道,從性能的角度來看沒有任何顧慮......但編碼慣例/實踐......呢? – 2015-02-06 12:00:48
我猜想慣例是非常主觀的。但是,如果我們從客觀的角度來看待它,我不覺得創建一個* Array引用*並將它分配到本地範圍內,當我們從不在事實旁邊使用它時傳遞該引用到一個功能。所以在我看來,調用方法時創建* Ref *是更好的方法。 – jAndy 2015-02-06 12:04:41
這是主觀的,但在我看來,它是更好地使用第二種方法。
由於@jAndy表示在代碼執行方面沒有區別,您的代碼的性能也不差,但它更易於調試並且更易於閱讀和理解第二種方法。
arr
的內容是否會再次被使用?如果是這樣,那麼選項2肯定是要走的路。如果不是......這很簡單,可能只是個人意見。
就個人而言,我不得不說,選項2是更好的做法,即使有時我有罪使用選項1選項2更容易閱讀的,它更容易跟蹤和它不太可能有人會必須重新閱讀它,因爲在閱讀代碼時(尤其是較新的程序員),他們暫時感到困惑或迷失於思想流動中。由於這些原因,維護起來會更容易,您以及將來可能會使用您的代碼的開發人員可能會節省使用它的時間。
我看到的唯一的負面因素是產生的開銷絕對很小,現在你有2行代碼,而不是1個。但我認爲這是無關緊要的,選項2的微小潛在好處超過了微小的負面因素選項1.
選項1沒有錯。更好的是,如果你以後不打算使用'arr'。 – techfoobar 2015-02-06 11:54:21
對我來說似乎很好,沒有明確的慣例/最佳做法。 – 2015-02-06 12:03:53