Deklarowany wewnątrz funkcji, ma zakres lokalny (tylko kod wewnątrz funkcji jest w trybie ścisłym):
myFunction();
function myFunction() {
„use strict”;
y = 3.14; // Spowoduje to błąd
}
Try it Yourself ”
Składnia „use strict”; Składnia
Składnia, do deklarowania trybu ścisłego, została zaprojektowana tak, aby była kompatybilna ze starszymi wersjami JavaScript.
Kompilacja literału numerycznego (4 + 5;) lub literału łańcuchowego („John Doe”;) w programie JavaScript nie ma żadnych efektów ubocznych. Po prostu kompiluje się do nieistniejącej zmiennej i umiera.
Więc "use strict";
ma znaczenie tylko dla nowych kompilatorów, które „rozumieją” jego znaczenie.
Dlaczego Strict Mode?
Tryb ścisły ułatwia pisanie „bezpiecznego” JavaScriptu.
Tryb ścisły zmienia wcześniej akceptowaną „złą składnię” w prawdziwe błędy.
Jako przykład, w normalnym JavaScripcie, błędna nazwa zmiennej tworzy nową zmienną globalną. W trybie ścisłym spowoduje to wyświetlenie błędu, uniemożliwiając przypadkowe utworzenie zmiennej globalnej.
W normalnym JavaScripcie programista nie otrzyma żadnej informacji zwrotnej o błędzie przy przypisywaniu wartości do niezapisywalnych właściwości.
W trybie ścisłym, każde przypisanie do niezapisywalnej właściwości, właściwości typu getter-only, nieistniejącej właściwości, nieistniejącej zmiennej, lub nieistniejącego obiektu, wyrzuci błąd.
Niedopuszczalne w trybie ścisłym
Używanie zmiennej, bez jej zadeklarowania, jest niedozwolone:
x = 3.14; // Spowoduje to błąd
Spróbuj sam”
Obiekty też są zmiennymi.
Używanie obiektu, bez jego zadeklarowania, jest niedozwolone:
x = {p1:10, p2:20}; // Spowoduje to błąd
Try it Yourself”
Usuwanie zmiennej (lub obiektu) jest niedozwolone.
var x = 3.14;
delete x; // Spowoduje to błąd
Try it Yourself”
Usuwanie funkcji jest niedozwolone.
function x(p1, p2) {};
delete x; // This will cause an error
Try it Yourself”
Dublowanie nazwy parametru jest niedozwolone:
function x(p1, p1) {}; // This will cause an error
Try it Yourself „
Octal numeric literals are not allowed:
var x = 010; // Spowoduje to błąd
Próbka własna”
Octalowe znaki ucieczki nie są dozwolone:
var x = „\010”; // Spowoduje to błąd
Try it Yourself”
Pisanie do właściwości tylko do odczytu jest niedozwolone:
var obj = {};
Object.defineProperty(obj, „x”, {value:0, writable:false});
obj.x = 3.14; // This will cause an error
Try it Yourself”
Writing to a get-only property is not allowed:
var obj = {get x() {return 0} };
obj.x = 3.14; // This will cause an error
Try it Yourself”
Deleting an undeletable property is not allowed:
delete Object.prototype; // This will cause an error
Try it Yourself”
Słowo eval
nie może być użyte jako zmienna:
var eval = 3.14; // This will cause an error
Try it Yourself”
Słowo arguments
nie może być użyte jako zmienna:
var arguments = 3.14; // Spowoduje to błąd
Spróbuj sam”
Oświadczenie with
nie jest dozwolone:
with (Math){x = cos(2)}; // This will cause an error
Try it Yourself”
Z powodów bezpieczeństwa, eval()
nie jest dozwolone tworzenie zmiennych w zakresie, z którego zostało wywołane:
eval („var x = 2”);
alert (x); // Spowoduje to błąd
Spróbuj sam”
Słowo kluczowe this
w funkcjach zachowuje się inaczej w trybie strict.
Słowo kluczowe this
odnosi się do obiektu, który wywołał funkcję.
Jeśli obiekt nie jest określony, funkcje w trybie ścisłym zwrócą undefined
, a funkcje w trybie normalnym zwrócą obiekt globalny (okno):
function myFunction() {
alert(this); // will alert „undefined”
}
myFunction();
Try it Yourself”
Future Proof!
Słowa kluczowe zarezerwowane dla przyszłych wersji JavaScript NIE mogą być używane jako nazwy zmiennych w trybie ścisłym.
Są to:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
var public = 1500; // To spowoduje błąd
Try it Yourself”
Watch Out!
Dyrektywa „use strict” jest rozpoznawana tylko na początku skryptu lub funkcji.