Przeglądałem referencje JavaScript w Mozilla Developer Network i natknąłem się na coś, co nazywa się "strict mode"
. Przeczytałem go ponownie i nie rozumiem, co robi. Czy ktoś może pokrótce wyjaśnić (ogólnie), jaki jest jego cel i do czego jest przydatny?
javascript
strict-mode
nkcmr
źródło
źródło
Odpowiedzi:
Jego głównym celem jest dokładniejsze sprawdzanie.
Po prostu dodaj
"use strict";
na górze kodu, zanim cokolwiek innego.Na przykład,
blah = 33;
to poprawny JavaScript. Oznacza to, że tworzysz całkowicie globalną zmiennąblah
.Ale w trybie ścisłym jest to błąd, ponieważ nie użyłeś słowa kluczowego "var" do zadeklarowania zmiennej.
Przez większość czasu nie masz na myśli tworzenia zmiennych globalnych w środku jakiegoś dowolnego zakresu, więc przez większość czasu, gdy
blah = 33
jest to napisane, jest to błąd, a programista tak naprawdę nie chciał, aby była to zmienna globalna, mieli na myśli pisaćvar blah = 33
.Podobnie zabrania wielu rzeczy, które są technicznie ważne.
NaN = "lol"
nie powoduje błędu. Nie zmienia też wartości NaN. używanie ścisłego this (i podobnych dziwnych stwierdzeń) powoduje błędy. Większość ludzi to docenia, ponieważ nie ma powodu, aby kiedykolwiek pisaćNaN = "lol"
, więc najprawdopodobniej była to literówka.Przeczytaj więcej na stronie MDN o trybie ścisłym
źródło
Jednym z aspektów trybie ścisłym nie wspomniano w odpowiedzi Simona jest to, że ścisłe ustawia tryb
this
naundefined
funkcje wywoływane przez wywołania funkcji.Więc takie rzeczy
spowoduje błąd, gdy
privateMethod
zostanie wywołany (ponieważ nie możesz dodać właściwości doundefined
), zamiast bezużytecznie dodawaćb
właściwość do obiektu globalnego.źródło
privateMethod.bind(this)();
inew
jsbin.com
Dodano tryb ścisły, aby istniał łatwo analizowalny statycznie podzbiór EcmaScript, który byłby dobrym celem dla przyszłych wersji języka. Tryb ścisły został również zaprojektowany w nadziei, że programiści, którzy ograniczą się do trybu ścisłego, popełnią mniej błędów, a błędy, które robią, będą się manifestować w bardziej oczywisty sposób.
Harmony , która, miejmy nadzieję, stanie się następną główną wersją EcmaScript, zostanie zbudowana na bazie ES5rict.
Niektóre inne eksperymenty językowe również zależą od trybu ścisłego. SES zależy od możliwości analizy trybu ścisłego ES5.
Załącznik C normy wyjaśnia różnice między trybem ścisłym a trybem normalnym.
źródło
Wywołanie trybu ścisłego w kodzie
Tryb ścisły dotyczy całych skryptów lub poszczególnych funkcji. Nie dotyczy instrukcji blokowej ujętej w nawiasy {}, próba zastosowania jej w takich kontekstach nic nie daje.
Cały skrypt:
Powiedzmy, że tworzymy app.js, więc dodanie skryptu użycia pierwszej instrukcji wymusi tryb ścisły dla całego kodu.
Tryb ścisły dla funkcji:
Aby wywołać tryb ścisły dla funkcji, umieść dokładną instrukcję „użyj ścisłego”; na początku treści funkcji przed jakąkolwiek inną instrukcją.
Tryb ścisły obejmuje kilka zmian w normalnej semantyce Javascript. Pierwszy tryb ścisły eliminuje niektóre ciche błędy JavaScript, zmieniając je tak, aby wyświetlały błędy.
Na przykład: kod w trybie ścisłym
W powyższym przykładzie kodu bez użycia trybu ścisłego w kodzie Nie spowoduje to błędu. Ponieważ mamy dostęp do zmiennej
x
bez jej deklarowania. Więc w trybie ścisłym dostęp do niezadeklarowanej zmiennej generuje błąd.Teraz spróbujmy uzyskać dostęp do zmiennej x bez deklarowania jej bez trybu ścisłego.
Zaleta korzystania z trybu ścisłego:
źródło
Tryb ścisły wprowadza kilka zmian w normalnej semantyce JavaScript.
Tryb ścisły eliminuje niektóre ciche błędy JavaScript, zmieniając je tak, aby wyświetlały błędy.
Tryb ścisły naprawia błędy, które utrudniają silnikom JavaScript wykonywanie optymalizacji.
tryb ścisły zabrania niektórych składni, które prawdopodobnie zostaną zdefiniowane w przyszłych wersjach ECMAScript.
źródło
ECMAScript5
wprowadza kilka nowych obiektów i właściwości a także tzw"strict mode"
.Tryb ścisły to podzbiór języka, który wyklucza przestarzałe funkcje. Tryb ścisły to opt-in i nie jest wymagany, co oznacza, że jeśli chcesz, aby kod działał w trybie ścisłym, deklarujesz swój zamiar, używając (raz na funkcję lub raz na cały program) następującego ciągu:
źródło
2017 iw końcu znalazłem dokumentację:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
źródło
Pytanie:
Oto problem, który napotkałem, postępowałem zgodnie z tutorialem i skończyło się na tym, że próbowałem skompilować następujący
scss
plik i próbowałem wygenerować z niego kod CSS,za pomocą następującego
gulpfile.js
zadania:Więc otrzymuję następujący błąd:
Rozwiązanie:
Pokazuje więc
index.js
plik, który znajduje się w moim module gulp-sass (który jest w zasadzie zablokowany i nie powinien być edytowany). Ale jeśli pójdę na siłę i dodam"use_strict"
na początku tegoindex.js
pliku, moje zadanie będzie przebiegać sprawnie.Byłem bezradny, więc nadal używam tego jako rozwiązania! Ale potem, po przejrzeniu kilku innych pytań i odpowiedzi SO , zobaczyłem następującą odpowiedź :
i wcześniej zaktualizowałem moje NodeJ (do wersji 10.x), a następnie przebudowałem Gulp, uruchamiając następujące polecenia zgodnie z instrukcjami Terminal:
I wszystko w porządku. Więc tak to zostało rozwiązane. Cofnąłem zmiany, które wprowadziłem dla
index.js
pliku modułu gulp. A teraz działa płynnie.Mam nadzieję, że ta odpowiedź będzie pomocna dla kogoś tam!
źródło