Niedawno uruchomiłem część mojego kodu JavaScript przez JSLint Crockforda , co spowodowało następujący błąd:
Problem w wierszu 1 znaku 1: Brak instrukcji „użyj ścisłej”.
Podczas wyszukiwania zauważyłem, że niektórzy ludzie dodają "use strict";
do kodu JavaScript. Po dodaniu instrukcji błąd przestał się pojawiać. Niestety Google nie ujawniło dużej części historii tego oświadczenia. Z pewnością musi to mieć związek z interpretacją JavaScript w przeglądarce, ale nie mam pojęcia, jaki byłby efekt.
O co w tym "use strict";
wszystkim chodzi, co to oznacza i czy nadal jest aktualne?
Czy którakolwiek z obecnych przeglądarek reaguje na "use strict";
ciąg znaków, czy jest on do wykorzystania w przyszłości?
javascript
syntax
jslint
use-strict
Mark Rogers
źródło
źródło
"use strict";
samego siebie nie powoduje, że JS ma zasięg leksykalny. Deklarowanie zmiennych przy pomocylet
iconst
powinno być również używane.Odpowiedzi:
Ten artykuł o Javascript Strict Mode może Cię zainteresować: John Resig - ECMAScript 5 Strict Mode, JSON i więcej
Aby zacytować kilka interesujących części:
I:
Pamiętaj też, że możesz zastosować „tryb ścisły” do całego pliku ... Możesz też użyć go tylko do określonej funkcji (wciąż cytowanie z artykułu Johna Resiga) :
Co może być pomocne, jeśli musisz mieszać stary i nowy kod ;-)
Przypuszczam, że to trochę tak, jak
"use strict"
można używać w Perlu (stąd nazwa?) : Pomaga popełnić mniej błędów, wykrywając więcej rzeczy, które mogą prowadzić do awarii.Tryb ścisły jest teraz obsługiwany przez wszystkie główne przeglądarki .
W natywnych modułach ECMAScript (z instrukcjami
import
iexport
) oraz klasach ES6 tryb ścisły jest zawsze włączony i nie można go wyłączyć.źródło
"use strict"
w Firefox 3.6, Safari 5, Chrome 7 i Opera 10.6 (wszystkie komputery Mac). Żadnych błędów, więc myślę, że 'use strict' nie jest jeszcze obsługiwany w żadnej przeglądarce. Nie testowałem jednak w IE9;)Jest to nowa funkcja ECMAScript 5. John Resig napisał ładne podsumowanie tego.
To tylko ciąg, który umieszczasz w swoich plikach JavaScript (na górze pliku lub wewnątrz funkcji), który wygląda następująco:
Umieszczenie go w kodzie teraz nie powinno powodować żadnych problemów z bieżącymi przeglądarkami, ponieważ jest to tylko ciąg znaków. Może to powodować problemy z kodem w przyszłości, jeśli kod narusza pragmę. Na przykład, jeśli obecnie
foo = "bar"
nie zdefiniowałeśfoo
, kod zacznie się nie powieść ... co jest moim zdaniem dobrą rzeczą.źródło
<script>"use strict";
. Flaga dotyczy tylko bloku, w którym jest uwzględniona.'use strict';
zamiast tego"use strict";
, to nie zamiast. Ma to większy sens, ponieważ dodanie go do obiektu globalnego oznacza, że może on nie działać przy następnym uruchomieniu funkcji / zrobić coś innego, co zresetuje blok, tak jak będzie w najwyższym bloku (globalnym).Oświadczenie
"use strict";
instruuje przeglądarkę na stosowanie trybu surowe, która jest zmniejszona i bezpieczniejsze zestaw funkcji JavaScriptu.Lista funkcji (niewyczerpująca)
Nie zezwala na zmienne globalne. (Łapie brakujące
var
deklaracje i literówki w nazwach zmiennych)Ciche niepomyślne przypisania spowodują błąd w trybie ścisłym (przypisywanie
NaN = 5;
)Próby usunięcia nieusuwalnych właściwości throw (
delete Object.prototype
)Wymaga, aby wszystkie nazwy właściwości w literale obiektu były unikalne (
var x = {x1: "1", x1: "2"}
)Nazwy parametrów funkcji muszą być unikalne (
function sum (x, x) {...}
)Zabrania składni ósemkowej (
var x = 023;
niektórzy deweloperzy błędnie zakładają, że poprzedzające zero nie robi nic, aby zmienić liczbę).Zabrania
with
słowa kluczowegoeval
w trybie ścisłym nie wprowadza nowych zmiennychZabrania usuwania zwykłych nazw (
delete x;
)Zabrania wiążących lub przyporządkowanie nazwy
eval
iarguments
w dowolnej formieTryb ścisły nie aliasuje właściwości
arguments
obiektu z parametrami formalnymi. (tj. wfunction sum (a,b) { return arguments[0] + b;}
Działa, ponieważarguments[0]
jest związanya
i tak dalej.)arguments.callee
nie jest wspierany[Ref: Tryb ścisły , Mozilla Developer Network ]
źródło
window.foo = bar
.).Jeśli ludzie martwią się użyciem
use strict
, warto sprawdzić ten artykuł:ECMAScript 5 Obsługa trybu ścisłego w przeglądarkach. Co to znaczy?
NovoGeek.com - blog Krishny
Mówi o wsparciu przeglądarki, ale co ważniejsze, jak sobie z nią bezpiecznie poradzić:
źródło
window
this
którego nie możesz celowaćwindow
?this
należy do jego własnej funkcji, a nie do globalnego oknathis
jest tak naprawdęundefined
.Słowo ostrzeżenia, wszyscy programiści
"use strict"
wymagający dużej mocy : zastosowanie do istniejącego kodu może być niebezpieczne! To nie jest jakaś samoprzylepna, radosna naklejka, którą można uderzyć w kod, aby był „lepszy”. Wraz z"use strict"
pragmą przeglądarka nagle wyrzuci wyjątki w przypadkowych miejscach, których nigdy wcześniej nie rzucała, tylko dlatego, że w tym miejscu robisz coś, co domyślnie / luźny JavaScript na szczęście pozwala, ale surowo go nie znosi! Możesz mieć naruszenia ścisłości, ukrywając się w rzadko używanych wywołaniach w kodzie, które rzucą wyjątek tylko wtedy, gdy w końcu zostaną uruchomione - powiedzmy, w środowisku produkcyjnym, z którego korzystają Twoi płatni klienci!Jeśli masz zamiar się zanurzyć, dobrym pomysłem jest zastosowanie
"use strict"
wraz z kompleksowymi testami jednostkowymi i ściśle skonfigurowanym zadaniem kompilacji JSHint, które da ci pewność, że nie ma ciemnego rogu modułu, który wybuchłby okropnie tylko dlatego, że ty włączyłem tryb ścisły. Lub, hej, oto kolejna opcja: po prostu nie dodawaj"use strict"
do żadnego ze starszych kodów, jest to prawdopodobnie bezpieczniejsze, szczerze mówiąc. OSTATECZNIE NIE dodawaj"use strict"
do żadnych modułów, których nie posiadasz lub nie zarządzasz, takich jak moduły stron trzecich.Myślę, że nawet jeśli jest to śmiertelnie zamknięte zwierzę w klatce,
"use strict"
może być dobre, ale musisz to zrobić dobrze. Najlepszym momentem na zachowanie surowości jest rozpoczęcie projektu od podstaw i rozpoczęcie od zera. SkonfigurujJSHint/JSLint
przy użyciu wszystkich ostrzeżeń i opcji tak mocno, jak tylko Twój zespół jest w stanie znieść żołądek, uzyskaj dobry system budowania / testowania / potwierdzaniaGrunt+Karma+Chai
, a dopiero potem zacznij oznaczać wszystkie nowe moduły jako"use strict"
. Przygotuj się na wyleczenie wielu drobnych błędów i ostrzeżeń. Upewnij się, że wszyscy rozumieją grawitację, konfigurując kompilację na FAIL, jeśliJSHint/JSLint
spowoduje jakiekolwiek naruszenie.Kiedy adoptowałem, mój projekt nie był projektem typu greenfield
"use strict"
. W rezultacie moje IDE jest pełne czerwonych znaków, ponieważ nie mam"use strict"
na połowie moich modułów, a JSHint narzeka na to. Przypomina mi o tym, jakie refaktoryzacje powinienem zrobić w przyszłości. Moim celem jest być wolnym od czerwonych znaków z powodu wszystkich moich brakujących"use strict"
stwierdzeń, ale to już za wiele lat.źródło
"use strict";
do istniejącego kodu. Biorąc to pod uwagę, prawie zawsze będę go używać, gdy piszę nowy kod od zeraUżycie
'use strict';
nie nagle poprawia kod.Tryb ścisły JavaScript jest funkcją ECMAScript 5 . Możesz włączyć tryb ścisły, deklarując to w górnej części skryptu / funkcji.
Gdy silnik JavaScript zobaczy tę dyrektywę , zacznie interpretować kod w specjalnym trybie. W tym trybie błędy są zgłaszane, gdy zostaną wykryte pewne praktyki kodowania, które mogą być potencjalnymi błędami (co jest przyczyną trybu ścisłego).
Rozważ ten przykład:
Mając obsesję na punkcie wyrównywania literałów liczbowych, deweloper nieumyślnie zainicjował zmienną
b
literałem ósemkowym. Tryb nie-ścisły zinterpretuje to jako literał liczbowy z wartością24
(w podstawie 10). Jednak tryb ścisły zgłosi błąd.Aby uzyskać niewyczerpującą listę specjalizacji w trybie ścisłym, zobacz tę odpowiedź .
Gdzie powinienem użyć
'use strict';
?W mojej nowej aplikacji JavaScript: Oczywiście! Tryb ścisły może być używany jako informator, gdy robisz coś głupiego ze swoim kodem.
W moim istniejącym kodzie JavaScript: Prawdopodobnie nie! Jeśli Twój istniejący kod JavaScript zawiera instrukcje, które są zabronione w trybie ścisłym, aplikacja po prostu się zepsuje. Jeśli chcesz mieć tryb ścisły, powinieneś być przygotowany na debugowanie i poprawianie istniejącego kodu. Dlatego użycie
'use strict';
nagle nie poprawia kodu .Jak korzystać z trybu ścisłego?
Wstaw
'use strict';
instrukcję na górze skryptu:Pamiętaj, że wszystko w pliku
myscript.js
będzie interpretowane w trybie ścisłym.Lub wstaw
'use strict';
instrukcję na górze swojej funkcji:Wszystko w zakresie leksykalnym funkcji
doSomething
będzie interpretowane w trybie ścisłym. Ważne jest tutaj słowo zakres leksykalny . Na przykład, jeśli kod ścisły wywołuje funkcję biblioteki, która nie jest ścisła , tylko kod jest wykonywany w trybie ścisłym, a nie funkcja wywoływana. Zobacz tę odpowiedź, aby uzyskać lepsze wyjaśnienie.Jakie rzeczy są zabronione w trybie ścisłym?
Znalazłem fajny artykuł opisujący kilka rzeczy, które są zabronione w trybie ścisłym (pamiętaj, że nie jest to lista wyłączna):
Słowa zastrzeżone dla przyszłych wersji JavaScript
ECMAScript 5 dodaje listę słów zastrzeżonych. Jeśli użyjesz ich jako zmiennych lub argumentów, tryb ścisły zgłosi błąd. Zastrzeżone słowa to:
Dalsza lektura
źródło
'use strict'
dyrektywy, zostaną one wykonane w trybie innym niż ścisły, nawet jeśli zostaną wywołane z funkcji działającej w trybie ścisłym. Zobacz ten asnwer o wyjaśnienia.this
). Teraz widzę, że mówiłeś o wywołaniu innych funkcji.Zdecydowanie polecam każdemu programistowi, aby zaczął teraz używać trybu ścisłego. Obsługuje go wystarczająca liczba przeglądarek, aby tryb ścisły słusznie uchronił nas przed błędami, o których nawet nie wiedzieliśmy, że są w twoim kodzie.
Najwyraźniej na początkowym etapie wystąpią błędy, których nigdy wcześniej nie napotkaliśmy. Aby uzyskać pełną korzyść, musimy przejść odpowiednie testy po przejściu do trybu ścisłego, aby upewnić się, że wszystko złapaliśmy. Zdecydowanie nie tylko wrzucamy
use strict
naszego kodu i zakładamy, że nie ma błędów. Tak więc rezygnacja jest taka, że nadszedł czas, aby zacząć używać tej niezwykle przydatnej funkcji języka do pisania lepszego kodu.Na przykład,
JSLint to debugger napisany przez Douglasa Crockforda. Wystarczy wkleić skrypt, a on szybko przeszuka wszelkie zauważalne problemy i błędy w kodzie.
źródło
Chciałbym zaoferować nieco bardziej uzasadnioną odpowiedź uzupełniającą inne odpowiedzi. Miałem nadzieję na edycję najpopularniejszej odpowiedzi, ale mi się nie udało. Starałem się, aby było to jak najbardziej wyczerpujące i kompletne.
Więcej informacji można znaleźć w dokumentacji MDN .
"use strict"
dyrektywa wprowadzona w ECMAScript 5.Dyrektywy są podobne do oświadczeń, ale różne.
use strict
nie zawiera słów kluczowych: Dyrektywa jest prostym wyrażeniem wyrażającym, które składa się ze specjalnego literału ciągowego (w pojedynczym lub podwójnym cudzysłowie). Silniki JavaScript, które nie implementują ECMAScript 5, widzą jedynie wyrażenie wyrażeniowe bez skutków ubocznych. Oczekuje się, że przyszłe wersje standardów ECMAScript wprowadząuse
jako prawdziwe słowo kluczowe; cytaty stałyby się w ten sposób przestarzałe.use strict
może być użyte tylko na początku skryptu lub funkcji, tzn. musi poprzedzać każdą inną (rzeczywistą) instrukcję. Nie musi to być pierwsza instrukcja w skrypcie funkcji: może być poprzedzona innymi wyrażeniami instrukcji składającymi się z literałów łańcuchowych (a implementacje JavaScript mogą traktować je jako dyrektywy specyficzne dla implementacji). Instrukcje literałów łańcuchowych, które następują po pierwszej instrukcji rzeczywistej (w skrypcie lub funkcji) są prostymi instrukcjami wyrażeń. Tłumacze nie mogą interpretować ich jako dyrektyw i nie mają one żadnego skutku.use strict
Dyrektywa wskazuje, że kod następująco (w skrypcie lub funkcja) jest ścisły kod. Kod na najwyższym poziomie skryptu (kod, który nie znajduje się w funkcji) jest uważany za kod ścisły, gdy skrypt zawierause strict
dyrektywę. Treść funkcji jest uważana za ścisły kod, gdy sama funkcja jest zdefiniowana w ścisłym kodzie lub gdy funkcja zawierause strict
dyrektywę. Kod przekazywany doeval()
metody jest uważany za kod ścisły, gdyeval()
został wywołany ze ścisłego kodu lub zawierause strict
samą dyrektywę.Tryb ścisły ECMAScript 5 jest ograniczonym podzbiorem języka JavaScript, który eliminuje istotne deficyty języka i oferuje bardziej rygorystyczne sprawdzanie błędów i większe bezpieczeństwo. Poniżej wymieniono różnice między trybem ścisłym a trybem normalnym (z których pierwsze trzy są szczególnie ważne):
with
-statement w trybie ścisłym.Object
, otrzymasz wartośćReferenceError
. W trybie normalnym identyfikator jest domyślnie zadeklarowany jako zmienna globalna (jako właściwość globalnejObject
)this
ma wartośćundefined
w funkcjach, które zostały wywołane jako funkcje (a nie jako metody). (W trybie normalnymthis
zawsze wskazuje globalnyObject
). Tej różnicy można użyć do przetestowania, czy implementacja obsługuje tryb ścisły:Również gdy funkcja jest wywoływana w trybie ścisłym
call()
lubapply
w trybie ścisłym, wówczasthis
jest to dokładnie wartość pierwszego argumentucall()
lubapply()
wywołania. (W trybie normalnymnull
iundefined
są zastępowane przez globalne,Object
a wartości, które nie są obiektami, są rzutowane na obiekty).W trybie ścisłym otrzymasz
TypeError
, gdy spróbujesz przypisać właściwości tylko do odczytu lub zdefiniować nowe właściwości dla obiektu nierozszerzalnego. (W trybie normalnym oba po prostu kończą się niepowodzeniem bez komunikatu o błędzie).eval()
nie można deklarować ani definiować zmiennych lub funkcji w zakresie wywołującego (jak można to zrobić w trybie normalnym). Zamiast tego tworzony jest nowy zakres,eval()
a zmienne i funkcje mieszczą się w tym zakresie. Ten zakres jest niszczony poeval()
zakończeniu wykonywania.SyntaxError
gdy zadelete
operatorem pojawi się niekwalifikowany identyfikator (zmienna, funkcja lub parametr funkcji). W trybie normalnymdelete
wyrażenie nic nie robi i jest ocenianefalse
.TypeError
gdy spróbujesz usunąć nieskonfigurowalną właściwość. (W trybie normalnym próba po prostu kończy się niepowodzeniem, adelete
wyrażenie jest oceniane nafalse
).0x
. (W trybie normalnym niektóre implementacje dopuszczają literały ósemkowe).eval
iarguments
są traktowane jak słowa kluczowe. Nie możesz zmienić ich wartości, nie możesz przypisać im wartości i nie możesz używać ich jako nazw zmiennych, funkcji, parametrów funkcji lub identyfikatorów bloku catch.arguments.caller
iarguments.callee
powodująTypeError
funkcję w trybie ścisłym. Ponadto niektóre właściwości funkcji wywołującej i argumentów funkcji w trybie ścisłym powodują,TypeError
gdy próbujesz je odczytać.źródło
0
.Moje dwa centy:
Jednym z celów trybu ścisłego jest umożliwienie szybszego debugowania problemów. Pomaga deweloperom, zgłaszając wyjątek, gdy wystąpią pewne złe rzeczy, które mogą powodować ciche i dziwne zachowanie strony. W momencie, gdy skorzystamy
use strict
, kod wyrzuci błędy, które pomogą programistom naprawić go z wyprzedzeniem.Kilka ważnych rzeczy, których nauczyłem się po użyciu
use strict
:Zapobiega globalnej deklaracji zmiennych:
Teraz ten kod tworzy
nameoftree
w zasięgu globalnym, do którego można uzyskać dostęp za pomocąwindow.nameoftree
. Po wdrożeniuuse strict
kod generowałby błąd.Sample
Eliminuje
with
stwierdzenie:with
instrukcji nie można zminimalizować za pomocą narzędzi takich jak uglify-js . Są również przestarzałe i usuwane z przyszłych wersji JavaScript.Sample
Zapobiega duplikatom:
Kiedy mamy zduplikowaną właściwość, zgłasza wyjątek
Jest jeszcze kilka, ale muszę zdobyć więcej wiedzy na ten temat.
źródło
Jeśli korzystasz z przeglądarki wydanej w ubiegłym roku, najprawdopodobniej obsługuje tryb JavaScript Strict. Tylko starsze przeglądarki, zanim ECMAScript 5 stał się obecnym standardem, nie obsługują go.
Cytaty wokół polecenia upewniają się, że kod będzie nadal działał również w starszych przeglądarkach (chociaż rzeczy, które generują błąd składniowy w trybie ścisłym, ogólnie po prostu powodują nieprawidłowe działanie skryptu w trudny do wykrycia sposób w starszych przeglądarkach).
źródło
Podczas dodawania
"use strict";
następujące przypadki wygenerują błąd SyntaxError przed uruchomieniem skryptu:Torując drogę dla przyszłych wersjach ECMAScript , korzystając z jednej z nowo zastrzeżonych słów kluczowych (na przewidywania dla ECMAScript 6 ):
implements
,interface
,let
,package
,private
,protected
,public
,static
, iyield
.Deklarowanie funkcji w blokach
Składnia ósemkowa
this
wskaż obiekt globalny.Deklarowanie dwukrotnie tej samej nazwy dla nazwy właściwości w literale obiektu
Tak już nie jest w ECMAScript 6 ( błąd 1041128 ).
Deklarowanie dwóch argumentów funkcji z tą samą nazwą funkcji
Ustawienie wartości dla niezadeklarowanej zmiennej
Używanie
delete
nazwy zmiennejdelete myVariable;
Użycie
eval
lubarguments
jako nazwy argumentu zmiennej lub funkcjiŹródła:
Przejście do trybu ścisłego w MDN
Tryb ścisły w MDN
Tryb ścisły JavaScript i dlaczego warto go używać na blogu Colina J. Ihriga (wersja zarchiwizowana)
źródło
Tryb ścisły wprowadza kilka zmian w normalnej semantyce JavaScript:
eliminuje niektóre ciche błędy JavaScript, zmieniając je w celu zgłaszania błędów.
naprawia błędy, które utrudniają silnikom JavaScript wykonywanie optymalizacji.
zabrania definiowania składni w przyszłych wersjach ECMAScript.
Aby uzyskać więcej informacji, odwiedź Strict Mode- Javascript
źródło
„Użyj ścisłego”; to ubezpieczenie, że programista nie będzie korzystał z luźnych lub złych właściwości JavaScript. Jest to przewodnik, podobnie jak linijka pomoże ci tworzyć proste linie. „Use Strict” pomoże ci wykonać „Proste kodowanie”.
Ci, którzy wolą nie używać linijek do prostowania linii, zwykle kończą na tych stronach, prosząc innych o debugowanie kodu.
Uwierz mi. Narzut jest pomijalny w porównaniu do źle zaprojektowanego kodu. Doug Crockford, który od kilku lat jest starszym programistą JavaScript, ma tutaj bardzo interesujący post . Osobiście lubię cały czas wracać na jego stronę, aby upewnić się, że nie zapomnę mojej dobrej praktyki.
Współczesna praktyka JavaScript powinna zawsze wywoływać „Use Strict”; pragma. Jedynym powodem, dla którego grupa ECMA zdecydowała się na opcjonalny tryb „ścisły”, jest umożliwienie mniej doświadczonym programistom dostępu do JavaScript i dać czas na dostosowanie się do nowych i bezpieczniejszych praktyk kodowania.
źródło
Dołączenie
use strict
na początku wszystkich wrażliwych plików JavaScript od tego momentu jest małym sposobem na bycie lepszym programistą JavaScript i unikanie losowych zmiennych, które stają się globalne i rzeczy zmieniają się cicho.źródło
Cytowanie z w3schools :
Proszę odnieść się do http://www.w3schools.com/js/js_strict.asp wiedzieć więcej
źródło
"use strict"
sprawia, że kod JavaScript działa w trybie ścisłym , co w zasadzie oznacza, że wszystko musi zostać zdefiniowane przed użyciem. Głównym powodem używania trybu ścisłego jest unikanie przypadkowego globalnego użycia niezdefiniowanych metod.Również w trybie ścisłym rzeczy działają szybciej, niektóre ostrzeżenia lub ciche ostrzeżenia generują krytyczne błędy, lepiej zawsze używać go do tworzenia ładniejszego kodu.
"use strict"
jest powszechnie potrzebny do użycia w ECMA5, w ECMA6 domyślnie jest częścią JavaScript , więc nie trzeba go dodawać, jeśli używasz ES6.Spójrz na te instrukcje i przykłady z MDN:
1) tryb ścisły w funkcjach
2) tryb ścisły całego skryptu
3) Przypisanie do nie zapisywalnej globalnej
Możesz przeczytać więcej na MDN .
źródło
Niektórzy ludzie z komisji ECMAScript dobrze mówią: Zmiany w JavaScript, część 1: ECMAScript 5 " o tym, jak stopniowe użycie
"use strict"
przełącznika pozwala implementatorom JavaScript na usunięcie wielu niebezpiecznych funkcji JavaScript bez gwałtownego niszczenia każdej strony internetowej na świecie.Oczywiście mówi również o tym, ile jest tych błędów i jakie są błędy ECMAScript 5.
źródło
Małe przykłady do porównania:
Tryb nie ścisły:
Tryb ścisły:
Tryb nie ścisły:
źródło
this === 'a'
w obu przykładach?Zauważ, że
use strict
został wprowadzony w EcmaScript 5 i od tego czasu był przechowywany.Poniżej przedstawiono warunki do uruchomienia trybu ścisłego w ES6 i ES7 :
źródło
Głównymi powodami, dla których programiści powinni używać,
"use strict"
są:Zapobiega przypadkowej deklaracji zmiennych globalnych . Użycie
"use strict()"
zapewni, że zmienne zostaną zadeklarowanevar
przed użyciem. Na przykład:"use strict"
Dyrektywa jest rozpoznawana tylko na początku skryptu lub funkcji.Ciąg
"arguments"
nie może być użyty jako zmienna:Ograniczy użycie słów kluczowych jako zmiennych. Próba ich użycia spowoduje zgłoszenie błędów.
W skrócie sprawi, że Twój kod będzie mniej podatny na błędy, a z kolei sprawi, że napiszesz dobry kod.
Więcej informacji na ten temat można znaleźć tutaj .
źródło
„użyj ścisłego”; to wysiłek ECMA, aby JavaScript był nieco bardziej niezawodny. Wprowadza w JS próbę uczynienia go co najmniej trochę „surowym” (inne języki wdrażają surowe reguły od lat 90.). W rzeczywistości „zmusza” programistów JavaScript do postępowania zgodnie z najlepszymi praktykami kodowania. Mimo to JavaScript jest bardzo delikatny. Nie ma czegoś takiego jak zmienne wpisywane, metody wpisywane itp. Zdecydowanie polecam programistom JavaScript nauczyć się bardziej niezawodnego języka, takiego jak Java lub ActionScript3, i wdrożyć te same najlepsze praktyki w kodzie JavaScript, będzie on działał lepiej i łatwiej odpluskwić.
źródło
Tryb „ścisły” JavaScript został wprowadzony w ECMAScript 5.
Pisanie
"use strict";
u góry pliku JS włącza ścisłe sprawdzanie składni. Wykonuje dla nas następujące zadania:pokazuje błąd, jeśli próbujesz przypisać do niezadeklarowanej zmiennej
powstrzymuje Cię przed nadpisywaniem kluczowych bibliotek systemowych JS
zabrania niektórych niebezpiecznych lub podatnych na błędy funkcji językowych
use strict
działa również wewnątrz poszczególnych funkcji. Zawsze lepiej jest włączyćuse strict
do swojego kodu.Problem ze zgodnością przeglądarki: dyrektywy „use” mają być kompatybilne wstecz. Przeglądarki, które ich nie obsługują, zobaczą dosłowny ciąg znaków, do którego nie ma dalszych odniesień. Więc przejdą nad nią i przejdą dalej.
źródło
use strict
to sposób na zwiększenie bezpieczeństwa kodu, ponieważ nie można używać niebezpiecznych funkcji, które mogą nie działać zgodnie z oczekiwaniami. Jak napisano wcześniej, kod jest bardziej rygorystyczny.źródło
Opcja Użyj ścisłego służy do wyświetlania typowych i powtarzających się błędów, dzięki czemu jest obsługiwana inaczej i zmienia sposób działania skryptu Java, takie zmiany to:
Zapobiega przypadkowym globaliom
Bez duplikatów
Eliminuje za pomocą
Eliminuje ten przymus
Bezpieczniejsza ewaluacja ()
Błędy dla niezmiennych
możesz również przeczytać ten artykuł, aby uzyskać szczegółowe informacje
źródło
Zwykle JavaScript nie przestrzega surowych zasad, co zwiększa szanse na błędy. Po użyciu
"use strict"
kod JavaScript powinien przestrzegać ścisłego zestawu zasad, podobnie jak w innych językach programowania, takich jak użycie terminatorów, deklaracja przed inicjalizacją itp.Jeśli
"use strict"
zostanie użyty, kod powinien zostać napisany zgodnie z ścisłym zestawem reguł, zmniejszając w ten sposób ryzyko błędów i dwuznaczności.źródło
„użyj ścisłego”; Określa, że kod JavaScript powinien być wykonywany w „trybie ścisłym”.
Wszystkie nowoczesne przeglądarki obsługują „używaj ścisłego” oprócz Internet Explorera 9 i niższych wersji .
Niekorzyść
Jeśli programista użył biblioteki, która była w trybie ścisłym, ale był przyzwyczajony do pracy w trybie normalnym, może wywołać pewne działania w bibliotece, które nie działałyby zgodnie z oczekiwaniami.
Co gorsza, ponieważ programista jest w trybie normalnym, nie mają one zalet zgłaszania dodatkowych błędów, więc błąd może zawieść cicho.
Jak wspomniano powyżej, tryb ścisły powstrzymuje cię od robienia pewnych rzeczy.
Ludzie ogólnie myślą, że nie powinieneś używać tych rzeczy w pierwszej kolejności, ale niektórzy programiści nie lubią tego ograniczenia i chcą korzystać ze wszystkich funkcji języka.
Podstawowy przykład i dla odniesienia przejdź przez:
https://www.tutorialsteacher.com/javascript/javascript-strict
źródło
Tryb ścisły może zapobiec wyciekom pamięci.
Sprawdź poniższą funkcję napisaną w trybie innym niż ścisły:
W tej funkcji używamy zmiennej wywoływanej
name
wewnątrz funkcji. Wewnętrznie kompilator najpierw sprawdzi, czy w danym zakresie funkcji zadeklarowana jest jakaś zmienna o tej nazwie. Ponieważ kompilator zrozumiał, że nie ma takiej zmiennej, sprawdzi w zakresie zewnętrznym. W naszym przypadku jest to zasięg globalny. Znów kompilator zrozumiał, że nie ma również zadeklarowanej zmiennej w przestrzeni globalnej o tej nazwie, więc tworzy dla nas taką zmienną w przestrzeni globalnej. Koncepcyjnie ta zmienna zostanie utworzona w zasięgu globalnym i będzie dostępna w całej aplikacji.Innym scenariuszem jest, powiedzmy, zmienna zadeklarowana w funkcji potomnej. W takim przypadku kompilator sprawdza poprawność tej zmiennej w zakresie zewnętrznym, tj. Funkcji nadrzędnej. Tylko wtedy sprawdzi globalną przestrzeń i stworzy dla nas zmienną. Oznacza to, że należy wykonać dodatkowe kontrole. Wpłynie to na wydajność aplikacji.
Teraz napiszmy tę samą funkcję w trybie ścisłym.
Otrzymamy następujący błąd.
Tutaj kompilator zgłasza błąd odniesienia. W trybie ścisłym kompilator nie pozwala nam używać zmiennej bez jej deklarowania. W ten sposób można zapobiec wyciekom pamięci. Ponadto możemy pisać bardziej zoptymalizowany kod.
źródło