2016-01-18 28 views
11

截至2016年1月14日,JSLint開始抱怨varlet聲明,每個聲明有多個變量,並且創建了一個新指令multivar,忽略了這個新「問題」。預期';'而是看到','。 - JSLint multivar setting

這是一個非常重要的變化,因爲如果您在確實有在同一代碼塊中有兩個var s,則早期版本會發生抱怨。

也就是說,截至今天(2016年1月18日),該代碼現在打破了JSLint

/*jslint white:true, browser:true, devel:true */ 
function a(b) { 
    "use strict"; 
    var c, d; // <<< Now bad!! 
    d = "test"; 
    c = d + b; 
    console.log(c); 
} 

報告的錯誤是,Expected ';' and instead saw ','.爲線var c,d;

「正確」 的解決方法是顯然這:

/*jslint white:true, browser:true, devel:true */ 
function a(b) { 
    "use strict"; 
    var c; 
    var d; // <<< this *used* to be forbidden. 
    d = "test"; 
    c = d + b; 
    console.log(c); 
} 

注意,這個新正確的代碼會產生的誤差,Error: combine_var,在earlier versions of JSLint

從克羅克福德的變化,我能找到的唯一的描述似乎是this post on Google Plus

JSLint的現在有一個multivar選項容忍在一個變種正在申報多個名字,讓,或const語句。

...並在website instructions快速提...

容忍每條語句多個變量聲明
multivar
true如果varlet,或const語句可以聲明兩個或單個語句中的更多變量。

在JSLint.com上的multivar更改似乎還沒有在GitHub倉庫中。請參閱1月14日標題爲「var」的兩個簽名(1,2)。這兩個使JSLint中的代碼符合新要求,但不(afaict)添加在JSLint.com上描述和使用的multivar指令。

有人可以告訴我爲什麼現在鼓勵/需要多個var行,除了通常的「你應該忽略JSLint」嗎?也就是爲什麼在之前需要單個變量(我想是爲了鼓勵對提升的理解),以及爲什麼這個推理突然沒有意義?

+0

如果你打算否決和/或投票關閉,評論,爲什麼會是非常有幫助的。謝謝! – ruffin

+1

不確定downvote,但這是一個非常激進的變化,我絕對沒有想到(特別是因爲它是默認禁用)。 –

+3

嘿@JoshCrozier!是的,我也感到驚訝。這不僅僅是一個變化,就像JSLint建議我們最近停止使用'for'循環一樣,它與之前的要求相差180。 – ruffin

回答

2

來自AirBNB風格指南。

以這種方式添加新的變量聲明更容易,而且您不必擔心會換出一個;爲一個,或引入標點符號差異。您也可以使用調試器遍歷每個聲明,而不是一次跳過所有聲明。

更多內容在:https://github.com/airbnb/javascript#variables

+3

當然,我的意思是,這使*感*,但我不知道這是*爲什麼*。也就是說,這就是爲什麼當我編寫SQL時,我有'WHERE 1 = 1'和每個'AND'子句在它自己的行上,但在這種情況下奇怪的是JSLint完成了它以前的所有操作鼓勵,但*要求*。一個完整的答案可以解釋爲什麼公約完全改變了(**爲什麼之前需要一個'var'(爲了鼓勵理解提升),爲什麼這個推理突然沒有意義?**),所以+1 ,但我現在堅持接受。 – ruffin

+1

看起來我們不會很快得到更好的答案。要暫時接受這個,但如果我以後得到更好的,請留意。 :^ P – ruffin

+0

考慮了這一點之後,我的猜測是,這是確保函數頂部的所有變量的簡單方法。而這個變化是與現在我們擁有'const'和'let'這個事實不再有什麼關係。 –

相關問題