2015-05-05 57 views
4

我剛剛打開「JSLint的」驗證在集錦工作室3.在我的web應用程序,我有以下代碼:JSLint的 - 希望看到一個說法,而是看到了一個塊

Sessions.getVars = function() 
{ 
    return $http.get(baseURL) 
       .then(function(response) { return response.data; }, 
         function(response) { /* TODO Error handling */ });  
}; 

這是拋出現以下錯誤Expected to see a statement but instead saw a block

我查看了this的問題,但這真的只是回答了與開關/外殼語句有關的問題。任何人都可以幫助我理解爲什麼存在這個錯誤?

+1

有趣的是,一個塊是一個語句。那個錯誤信息是愚蠢的。啊,jslint。 – Sacho

+0

考慮發佈您的jslint選項,因爲對於該代碼,jslint會生成一大堆錯誤*,但不是您提到的*。 – Sacho

+0

也許我應該在發佈我的回答之前詢問:哪一行是報錯的錯誤? –

回答

1

這比一般的支架放置更容易。你有一個特定類型的塊 - 空塊 - 而JSLint不喜歡空塊。它要聲明。

注意,如果沒有返回值的函數返回undefined,所以你可以雜牌這個不改變函數是這樣的:

/*jslint sloppy:true, white:true */ 
/*global Sessions, $http, baseURL */ 
Sessions.getVars = function() 
{ 
    return $http.get(baseURL) 
       .then(function(response) { return response.data; }, 
         function(response) { return undefined; });  
}; 

我認爲這就是你看到的一切。

請注意,JSLint不是必然相當糟糕的地方你把這些其他答案會讓你相信! ; ^)不管怎樣,如果你使用JSLint指令,它並不是一個破壞者。

我使用two directives

  • sloppy - 允許您使用"use strict";
  • white跳過 - 允許你想要的任何空白。沒有這一點,你會看到錯誤,我認爲其他的答案這裏有期待,但這個錯誤是Expected exactly one space between ')' and '{'.

我說你可以只運行在JSLint.com的片段來檢查,但它看起來像克羅克福德正在警告他轉向新的JSLint,這比舊的更爲嚴格。目前,我建議在old.jslint.com處測試片段。

如果你這樣做,你會看到,爲了讓JSLint「完全開心」,你需要從第二個函數中刪除responsefunction() { return "Something"; });。它也不喜歡未使用的參數。

如果您想保留TODO評論,則還需要添加todo指令。

增加這兩方面的變化給了我們:

/*jslint sloppy:true, white:true, todo:true */ 
/*global Sessions, $http, baseURL */ 
Sessions.getVars = function() 
{ 
    return $http.get(baseURL) 
     .then(function(response) { return response.data; }, 
      function() { 
       /* TODO Error handling; add `err` to parameters */ 
       return undefined; 
     });  
}; 
+0

謝謝!將其修改爲'return undefined'解決了問題! –

+0

太棒了!很高興工作。 JSLint可以,尤其是,但它確實可以提高JavaScript代碼的質量,特別是在編碼器組中使用時。有很多不同意見,但是我還沒有發現JSLint是不可思議的錯誤。祝你好運。 – ruffin

2

這可能是因爲JSLint的強制把一個函數體的大括號在同一行function關鍵字的一個慣例,即

function myFunc() { // Put it here 
    // body... 
} 

它也可能是在一個錯誤的解析器失敗從新行開始識別函數的主體。

PS。如果JSLint適合您的需求,然後繼續使用它,但我覺得有義務向您介紹一些替代品:

jshinteslint。 jshint爲已知的陷阱提供了可配置的規則,並且強化了良好的編碼習慣,而eslint(另外)提供了強制執行特定編碼風格的規則(代價是看似壓倒性的配置選項)。

+0

是否可以關閉此功能?這不是我如何編寫*很多*我的功能...... –

+0

不知道jslint(我聽說它不是很可配置),但看到我的更新允許配置的替代方案。 –

+1

看來這不是問題。我把第二行的花括號移到第一行,問題依然存在。事實上,我只是注意到,這個錯誤的扭曲是在第5行,其中的開頭大括號是絕對與函數聲明在同一行... –

0

使用推薦的JavaScript格式樣式here其他樣式在這個樣式上大多是變體。大多數編輯器會自動將您的JS代碼格式化爲這種風格或其他非常接近的東西。

的{(左大括號)應該在開頭 複合語句的行的末尾。

根據推薦的格式規則(example),您可以避免大量令人討厭的JavaScript錯誤。它也將幫助其他人閱讀此代碼。

JSLint是關於執行這樣的指導方針。所以繞過他們往往是,但並不總是適得其反,這就是JSHint發明的原因。

+1

好的,謝謝你的提示:)我不認爲這是jslint選擇的問題,儘管如此,請參閱上面的回答評論... –

+0

這不是**官方的Javascript格式樣式,因爲沒有這樣的事物存在。 – Sacho

+0

我認爲道格拉斯克羅克福德幾乎是推薦格式的'官方'推薦人,而大多數編輯/ IDE通過慣例使用它。你可以稱之爲'推薦'而不是'官方'。 –

相關問題