2015-10-10 61 views
1

我目前正在嘗試eslint這段代碼並且遇到錯誤(請參閱截圖)。我不知道什麼是擺脫錯誤的最佳方法。擺脫no-param-resssign錯誤(eslint)的最佳方法是什麼?

代碼片段:

let pathFor = (path, view) => { 
    if (path.hash) { 
    view = path; 
    path = view.hash.route; 
    delete view.hash.route; 
    } 

試圖擺脫錯誤的(工作,但不知道這是否是最好的方式):

let pathFor = (pathData, viewData) => { 
    if (pathData.hash) { 
    view = pathData; 
    path = view.hash.route; 
    delete view.hash.route; 
    } 

這裏是崇高

eslinting截圖

enter image description here

+0

這個函數究竟是試圖完成什麼?看起來你傳遞了兩個值,然後用一個覆蓋另一個值? –

+0

@Jonah Williams對不起,我編輯過它。這個代碼片段是我從模板上覆制/粘貼的東西。我只是練習eslinting,因爲它對我來說是新的。我只是想知道最好的方式來接近no-param-resssign。 – Woppi

+1

將''no-param-reassign':0'添加到'.eslintrc'文件中。否則,你的更新代碼是好的,更好。 –

回答

2

很多方法可以做到這一點。由於你正在改變一個參數,而這個參數可能會讓人看到你的代碼時被混淆,或者導致其他問題,linter就會發生錯誤。編程的更多「功能風格」基本上就是linter推薦的(創建一個新變量而不是改變一箇舊變量),並且可能是正確的。我已經在過去使用的方法是用「匈牙利案」:

let pathFor = (_path, _view) => { 
    if (_path.hash) { 
    view = _path; 
    path = view.hash.route; 
    delete view.hash.route; 
    } 

然而,小下劃線可以在這取決於誰在閱讀你的代碼自己的意思隨心所欲。

但是,我認爲你擁有它的方式很好。正如Phil Karlton所說:

計算機科學中只有兩件難事:緩存失效和命名事情。

我認爲這個問題更多的是「最佳命名實踐」的問題。如果是這樣的話,我不會浪費太多精力。

+0

注意。感謝澄清這個問題:) – Woppi

+0

在你的例子''view'和'path'永遠不會被聲明。這可能會使esLint再次行動起來。它不應該是'const view''' const path' – RemEmber

+0

@RemEmber正確的,我省略了初始變量聲明(理論上它們可以在函數中聲明,但假設它們是在函數範圍之外初始化的和稍後在功能體中「填充」)。接得好。 –