Odpowiedzi:
Uwzględnij 'use strict';
jako pierwszą instrukcję w funkcji zawijania, więc wpływa ona tylko na tę funkcję. Zapobiega to problemom podczas łączenia skryptów, które nie są ścisłe.
Zobacz najnowszy post na blogu Douglasa Crockforda Strict Mode Is Coming To Town .
Przykład z tego postu:
(function () {
'use strict';
// this function is strict...
}());
(function () {
// but this function is sloppy...
}());
Aktualizacja: Jeśli nie chcesz zawijać funkcji natychmiastowej (np. Jest to moduł węzła), możesz wyłączyć ostrzeżenie.
W przypadku JSLint (na Zhami ):
/*jslint node: true */
W przypadku JSHint :
/*jshint strict:false */
lub (według Laith Shadeed )
/* jshint -W097 */
Aby wyłączyć dowolne ostrzeżenie z JSHint, sprawdź mapę w kodzie źródłowym JSHint (szczegóły w dokumentacji ).
Aktualizacja 2: JSHint obsługuje node:boolean
opcję. Zobacz .jshintrc
na github .
/* jshint node: true */
-1
/*jshint strict:false */
, co robisz (chyba że kod numeryczny ma szczególne zalety, których nie jestem świadomy)
"use strict";
tylko raz na plik.
Jeśli piszesz moduły dla NodeJS, są one już zamknięte. Poinformuj JSLint, że masz węzeł, umieszczając na górze pliku:
/*jslint node: true */
/*jshint strict:false */
"node": true
do .jshintrc
Sugerowałbym zamiast tego użyć jshint .
Pozwala to ukryć to ostrzeżenie poprzez /*jshint globalstrict: true*/
.
Jeśli piszesz bibliotekę, sugerowałbym użycie globalnej ścisłości tylko wtedy, gdy kod jest zamknięty w moduły, tak jak w przypadku nodejs.
W przeciwnym razie zmusisz wszystkich, którzy korzystają z Twojej biblioteki, do trybu ścisłego.
strict: 'global'
teraz i zobacz jshint.com/docs/options/#globalstrict
Zacząłem tworzyć aplikację Node.js / Browserify po wpisie na blogu JavaScript na wielu platformach . I natknąłem się na ten problem, ponieważ mój nowy plik Gruntfile nie przeszedł jshint.
Na szczęście znalazłem odpowiedź w książce Leanpub na temat Grunta :
Jeśli spróbujemy teraz, przeskanujemy nasz plik Gruntfile… i otrzymamy kilka błędów:
$ grunt jshint Running "jshint:all" (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of "use strict". 'use strict'; Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task "jshint:all" failed. Use --force to continue.
Oba błędy są spowodowane tym, że plik Gruntfile jest programem węzłowym i domyślnie JSHint nie rozpoznaje ani nie zezwala na użycie
module
wersji łańcuchowejuse strict
. Możemy ustawić regułę JSHint, która będzie akceptować nasze programy Węzłów. Przeprowadź edycję konfiguracji zadania jshint i dodaj klucz opcji:jshint: { options: { node: true }, }
Dodanie node: true
do jshinta options
, aby wprowadzić jshinta w „tryb węzła”, usunęło dla mnie oba błędy.
Dodaj plik .jslintrc (lub .jshintrc w przypadku jshint) w katalogu głównym projektu o następującej treści:
{
"node": true
}
Nie ma nic złego w formie łańcucha.
Zamiast unikać „globalnej” ścisłej formy w celu obawy o połączenie nieściśliwego javascript, prawdopodobnie lepiej jest po prostu naprawić ten cholerny, jaśniejszy skrypt javascript.
Myślę, że wszyscy przeoczyli „nagle” część tego pytania. Najprawdopodobniej w pliku .jshintrc wystąpił błąd składniowy, więc nie zawiera wiersza „przeglądarki”. Uruchom go przez moduł sprawdzania poprawności json, aby zobaczyć, gdzie jest błąd.
Oto jakie to proste: jeśli chcesz zachować ścisłość całego kodu, dodaj "use strict";
na początku kodu JavaScript.
Ale jeśli chcesz być ściśle związany z częścią kodu, skorzystaj z formularza funkcji. W każdym razie poleciłbym ci użycie go na początku JavaScript, ponieważ pomoże ci to być lepszym programistą.
"use strict";
na górze mojego pliku JS, więc może to nie być do końca prawda.
"use strict";
, w której jest umieszczony na górze kodu. Zezwala tylko "use strict;"
wtedy, gdy jest zawinięty w funkcję. (JS_Hint_ pozwala jednak na użycie formularza globalnego - patrz odpowiedź powyżej dla potrzebnych ustawień).