Ostatnio prowadziłem niektórych kodu JavaScript przez Crockford's JSINT i dał następujący błąd:

Problem w linii 1 znak 1: Brakujące oświadczenie "Użyj ścisłego".

Robiąc trochę wyszukiwania, zdałem sobie sprawę, że niektórzy ludzie dodają "use strict"; do swojego kodu JavaScript. Gdy dodałem oświadczenie, błąd przestał się pojawić. Niestety, Google nie ujawnił zbyt wiele historii za tym oświadczeniem. Z pewnością musi mieć coś wspólnego z tym, jak JavaScript jest interpretowany przez przeglądarkę, ale nie mam pojęcia, co byłby efekt.

Co to jest "use strict";, co to oznacza, a jest nadal istotne?

Czy któryś z aktualnych przeglądarek reaguje na ciąg "use strict"; lub czy to do wykorzystania w przyszłości?

7763
Mark Rogers 26 sierpień 2009, 20:10

21 odpowiedź

Jest to nowa funkcja ECMAScript 5. John Resig napisał w górę miły Podsumowanie z tego.

To tylko ciąg umieszczony w plikach JavaScript (na górze pliku lub wnętrza funkcji), który wygląda tak:

"use strict";

Umieszczenie go w kodzie teraz nie powinien powodować żadnych problemów z aktualnymi przeglądarkami, ponieważ jest to tylko ciąg. Może to spowodować problemy z kodem w przyszłości, jeśli kod narusza pragma. Na przykład, jeśli obecnie masz foo = "bar" bez definiowania foo, Kod rozpocznie się niepowodzenie ... co jest moim zdaniem dobrą rzeczą.

1292
Peter Mortensen 26 październik 2014, 10:31

Oświadczenie "use strict"; instruuje przeglądarkę do korzystania z trybu ścisłego, który jest zredukowanym i bezpieczniejszym zestawem funkcji JavaScript.

Lista funkcji (nie wyczerpujących)

  1. Nie zgadza zmiennych globalnych. (Missings Missing var Deklaracje i literówki w nazwach zmiennych)

  2. Ciche niepowodzenie zadań rzucą błąd w trybie ścisłym (przypisanie {x0}})

  3. Próby usuwania nieostrożnych właściwości będą rzucić ({x0}})

  4. Wymaga wszystkich nazw nieruchomości w literalnym obiekcie, aby być unikalnym ({x0}})

  5. Nazwy parametrów funkcji muszą być unikalne ({x0}})

  6. Zabrania składni ósemkowej (var x = 023; niektóre devs zakładają błędnie, że poprzedni zero nic nie zmienia numeru.)

  7. Zabrania słowa kluczowego with

  8. eval w trybie ścisłym nie wprowadza nowych zmiennych

  9. Zabrania usuwania zwykłych nazw ({x0}})

  10. Zabraniać wiązania lub przypisania nazw eval i arguments w dowolnej formie

  11. Surowy tryb nie alias właściwości obiektu arguments z formalnymi parametrami. (I. W function sum (a,b) { return arguments[0] + b;} To działa, ponieważ arguments[0] jest związany z a i tak dalej.)

  12. arguments.callee nie jest obsługiwany

[REF: Tryb ścisłego, mozilla deweloper Sieć ]

684
gprasant 22 styczeń 2016, 18:30

Jeśli ludzie martwi się o użycie use strict, warto warto sprawdzić ten artykuł:

ECMAScript 5 ' Surowy tryb "wsparcie w przeglądarkach. Co to znaczy?
NovoGeek.com - Kryszna Weblog

Rozmawia o wsparciu przeglądarki, ale co ważniejsze, jak sobie z tym poradzić:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/
427
Community 22 styczeń 2018, 11:13

Słowo ostrożnie, wszyscy jesteście twardymi programiści: stosowanie "use strict" do istniejącego kodu może być niebezpieczne! Ta rzecz nie jest jakaś feel-dobra, szczęśliwa naklejka na twarz, którą możesz uderzyć w kod, aby to zrobić "lepsze". Z "use strict" pragma, przeglądarka nagle rzuci wyjątki w przypadkowych miejscach, które nigdy wcześniej nie rzucili, ponieważ w tym miejscu robisz coś, co domyślnie / luźny JavaScript radośnie pozwala na ścisły JavaScript Abors! Możesz mieć naruszenie surowości ukrywające się w rzadko używanych połączeń w swoim kodzie, który wyrzuci wyjątek tylko wtedy, gdy w końcu uciekają - powiedzmy, w środowisku produkcyjnym, które korzystają z klientów!

Jeśli zamierzasz wziąć zanurzyć się, to dobry pomysł, aby zastosować "use strict" obok kompleksowych testów jednostkowych i ściśle skonfigurowany zadanie JSHINT Budowanie zadania, które daje ci pewność, że nie ma ciemnego rogu modułu, który dmuchną strasznie, tylko dlatego, że włączyłeś ścisły tryb. Lub Hej, oto inna opcja: po prostu nie dodaje "use strict" do żadnego z lekarza, prawdopodobnie jest bezpieczniejszy w ten sposób, uczciwie. Zdecydowanie nie Dodaj "use strict" do żadnych modułów, których nie posiadasz lub utrzymują, jak moduły strony trzeciej.

Myślę, że nawet to jest śmiertelne zwierzęce zwierzę, "use strict" może być dobrymi rzeczami, ale musisz to zrobić dobrze. Najlepszy czas na ścisłego jest wtedy, gdy twój projekt jest Greenfield i zaczynasz od podstaw. Skonfiguruj JSHint/JSLint za pomocą wszystkich ostrzeżeń i opcji skróconych tak mocno, jak twoja drużyna może brzmieć, uzyskać dobrą kompilację / test / assert System du Jook oznaczony jak Grunt+Karma+Chai, a następnie zacznij oznaczyć wszystkie nowe moduły jak "use strict". Bądź przygotowany do wyleczenia wielu czarnych błędów i ostrzeżeń. Upewnij się, że wszyscy rozumieją grawitację, konfigurując kompilację, aby poradzić sobie, jeśli JSHint/JSLint wytwarza wszelkie naruszenia.

Mój projekt nie był projektem Greenfield, gdy przyjęłem "use strict". W rezultacie mój IDE jest pełen czerwonych śladów, ponieważ nie mam "use strict" na pół moich modułów, a Jshint narzeka na to. To przypomnienie dla mnie o tym, co refaktoryczne powinienem zrobić w przyszłości. Moim celem jest być czerwonym znakiem za darmo z powodu wszystkich moich zaginionych oświadczeń "use strict", ale to już lata.

218
Ataur Rahman Munna 16 październik 2016, 09:10

Zdecydowanie polecam, aby każdy programista zaczyna korzystać z trybu ścisłego trybu. Istnieje wystarczająca ilość przeglądarek wspierających go, że ścisłym tryb będzie słusznie pomóc z wyjątkiem błędów, których nawet nie wiedziałem, byliśmy w swoim kodzie.

Najwyraźniej na początkowym etapie pojawią się błędy, których nigdy wcześniej nie spotkaliśmy. Aby uzyskać pełną korzyść, musimy wykonać odpowiednie testy po przełączeniu na tryb ścisłego, aby upewnić się, że złapaliśmy wszystko. Zdecydowanie nie tylko rzucimy use strict w naszym kodzie i zakładamy, że nie ma błędów. Więc Churnik jest taki, że nadszedł czas, aby zacząć korzystać z tej niezwykle przydatnej funkcji językowej, aby napisać lepszy kod.

Na przykład,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSINT to debuger napisany przez Douglas Crockford. Po prostu wklej w swoim skrypcie, i szybko skanuje wszelkie zauważalne problemy i błędy w kodzie.

139
Willi Mentzel 25 luty 2016, 15:54

Chciałbym zaoferować nieco bardziej założoną odpowiedź uzupełniającą inne odpowiedzi. Miałem nadzieję na edycję najpopularniejszej odpowiedzi, ale nie powiodło się. Próbowałem zrobić to jako wszechstronne i kompletne jak mogłem.

Możesz odnieść się do Dokumentacja MDN Więcej informacji.

"use strict" Dyrektywa wprowadzona w ECMASCRIPT 5.

Dyrektywy są podobne do oświadczeń, ale inne.

  • use strict Nie zawiera słów kluczowych: Dyrektywa jest prostym oświadczeniem wyrażenia, które składa się z specjalnego cyklina (w cytatach pojedynczych lub podwójnych). Silniki JavaScript, które nie wdrażają ECMASCRIPT 5, widząc jedynie oświadczenie wyrażające bez skutków ubocznych. Oczekuje się, że przyszłe wersje standardów ECMASCREPT wprowadzają use jako prawdziwe słowo kluczowe; Cytaty stały się w ten sposób przestarzały.
  • use strict może być używany tylko na początku skryptu lub funkcji, tj. Musi poprzedzać każdy inny (prawdziwy) oświadczenie. Nie musi być pierwszą instrukcją w skrypcie funkcji: może być poprzedzony innymi wyrażeń instrukcji, które składają się z literałów string (i wdrożenia JavaScript może traktować je jako dyrektywy konkretne). Wywołania literalów ciągowych, które śledzą pierwsze prawdziwe oświadczenie (w skrypcie lub funkcji) są prostymi instrukcjami wyrażeń. Tłumaczeni nie mogą ich interpretować jako dyrektywy i nie mają wpływu.

Dyrektywa {X0}} wskazuje, że następujący kod (w skrypcie lub funkcji) jest ścisłym kodem. Kod na najwyższym poziomie skryptu (kod, który nie jest w funkcji) jest uważany za ścisłego kodu, gdy skrypt zawiera dyrektywę use strict. Treść funkcji jest uważana za ścisłego kodu, gdy sama funkcja jest zdefiniowana w ścisłym kodzie lub gdy funkcja zawiera dyrektywę use strict. Kod przekazywany do metody eval() jest uważany za ścisły kod, gdy eval() został wywołany z ścisłego kodu lub zawiera samą dyrektywę use strict.

Surowy tryb ECMASCRIPT 5 jest ograniczony podzbiorem języka JavaScript, który eliminuje odpowiednie deficyty języka i posiada bardziej rygorystyczne sprawdzanie błędów i wyższe zabezpieczenia. Poniżej wymieniono różnice między trybem ścisłym i trybem normalnym (z których pierwsze są szczególnie ważne):

  • Nie możesz użyć with - oświadczenie w trybie ścisłego.
  • W trybie ścisłym tryb należy zadeklarować wszystkie zmienne: Jeśli przypisujesz wartość do identyfikatora, który nie został zadeklarowany jako zmienna, funkcja, parametr funkcyjny, parametr Catch-klauzuli lub własność globalnego Object, to otrzymasz A ReferenceError. W trybie normalnym identyfikator jest domyślnie zadeklarowany jako zmienna globalna (jako właściwość globalnego Object)
  • W ścisłym trybie słowo kluczowe this ma wartość undefined w funkcjach, które zostały wywołane jako funkcje (nie jako metody). (W trybie normalnym this zawsze wskazuje na globalną Object). Różnica ta może być użyta do testowania, jeśli implementacja obsługuje tryb ścisłego:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • Również gdy funkcja jest wywoływana z call() lub apply w trybie ścisłym, następnie this jest dokładnie wartością pierwszego argumentu {x3}} lub apply() inwokacja . (W trybie normalnym null i undefined są zastępowane przez globalną Object i wartości, które nie są obiektami, są rzucane do obiektów.)

  • W trybie ścisłym otrzymasz TypeError, gdy spróbujesz przypisać do właściwości odczytu lub zdefiniować nowe właściwości dla obiektu bez rozszerzalnego. (W trybie normalnym po prostu nie powiedzie się bez komunikatu o błędzie.)

  • W trybie ścisłym, podczas przekazywania kodu do eval(), nie można zadeklarować ani definiować zmiennych ani funkcji w zakresie rozmówcy (jak możesz to zrobić w trybie normalnym). Zamiast tego tworzony jest nowy zakres dla eval(), a zmienne i funkcje znajdują się w tym zakresie. Ten zakres jest zniszczony po zakończeniu wykonania eval().
  • W ścisłym trybie argumenty - obiekt funkcji zawiera statyczną kopię wartości, które są przekazywane do tej funkcji. W trybie normalnym Argumenty - obiekt ma nieco "magiczne" zachowanie: elementy tablicy i nazwanych parametrów funkcji odniesienia zarówno w tej samej wartości.
  • W ścisłym trybie otrzymasz SyntaxError, gdy następuje operator delete} przez nie wykwalifikowany identyfikator (parametr zmiennej, funkcji lub funkcji). W trybie normalnym wyrażenie delete nie zrobiłoby nic i jest oceniany do false.
  • W trybie ścisłym otrzymasz TypeError podczas próby usunięcia właściwości bez konfigurowalności. (W trybie normalnym próba po prostu nie powiedzie się, a wyrażenie delete jest oceniane do false).
  • W ścisłym trybie jest uważany za błąd syntaktyczny, gdy próbujesz zdefiniować kilka właściwości o tej samej nazwie dla literału obiektu. (W normalnym trybie nie ma błędu.)
  • W ścisłym trybie uważa się, że błąd syntaktyczny, gdy deklaracja funkcji ma wiele parametrów o tej samej nazwie. (W normalnym trybie nie ma błędu.)
  • W ścisłym trybie literały ósemkowe nie są dozwolone (są literami, które zaczynają się od 0x
  • W ścisłym trybie identyfikatory eval i arguments są traktowane jak słowa kluczowe. Nie możesz zmienić ich wartości, nie można przypisać ich wartości, a nie można ich używać jako nazwy dla zmiennych, funkcji, parametrów funkcyjnych lub identyfikatorów bloku zaczepowego.
  • W trybie ścisłym jest więcej ograniczeń na temat możliwości badania stosu połączeń. arguments.caller i arguments.callee Przyczyna TypeError w funkcji w trybie ścisłym. Ponadto niektórzy rozmówcy i argumenty właściwości funkcji w trybie ścisłym powodują TypeError, gdy próbujesz je przeczytać.
96
Ely 12 lipiec 2015, 20:31

Jeśli używasz przeglądarki wydanej w ostatnim roku, a więc najprawdopodobniej obsługuje tryb ścisłego JavaScript. Tylko starsze przeglądarki przed ECMAScript 5 stały się obecnym standardem, nie wspieraj go.

Cytaty wokół polecenia upewnij się, że kod będzie nadal pracować w starszych przeglądarkach (chociaż rzeczy, które generują błąd składni w trybie ścisłym, zazwyczaj powodują, że skrypt awarie w niektórych trudnych do wykrycia sposobu w tych starszych przeglądarkach).

64
Stephen 10 marzec 2012, 03:31

Tryb ścisłego wprowadza kilka zmian w normalnej semantyce javascript:

  • Eliminuje niektóre milczące błędy javascript, zmieniając je rzucić błędy.

  • naprawia błędy, które utrudniają JavaScript Silniki do wykonywania optymalizacji.

  • zakazuje pewnej składni, która może być zdefiniowana w przyszłości Wersje ECMASCRIPT.

Aby uzyskać więcej informacji, odwiedź ścisły tryb - JavaScript

54
alexyorke 29 październik 2014, 17:34

"Używaj ścisłego"; jest ubezpieczeniem, który programista nie użyje luźnych lub złych właściwości JavaScript. Jest to przewodnik, podobnie jak władca pomoże Ci zrobić proste linie. "Użyj ścisłego" pomoże Ci zrobić "proste kodowanie".

Te, które wolą, aby nie używać władców do wykonywania ich linii prosto zazwyczaj kończą się na tych stronach, które prosi o debugowanie ich kodu.

Uwierz mi. Overhead jest znikomy w porównaniu z łącznym zaprojektowanym kodem. Doug Crockford, który był starszym Deweloper JavaScript od kilku lat ma bardzo interesujący post tutaj. Osobiście lubię powracać do swojej witryny cały czas, aby upewnić się, że nie zapomnę mojej dobrej praktyki.

Nowoczesna praktyka JavaScript powinna zawsze wywoływać "Strict Strict"; Pragma >.

53
Peter Mortensen 26 październik 2014, 10:34

Włączenie {{x0}

47
Willi Mentzel 25 luty 2016, 15:55

cytowanie z W3schools:

Dyrektywa "Użyj ścisłej"

Dyrektywa "Użyj ścisłej" nowa w JavaScript 1.8.5 (ECMAScript wersja 5).

Nie jest to oświadczenie, ale dosłowne wyrażenie, ignorowane przez wcześniejsze wersje JavaScript.

Celem "użycia ścisłego" jest wskazywanie, że kod powinien zostać wykonany w "trybie ścisłym".

Z ścisłym trybem, nie można na przykład użyć zmiennych niezarejestrowanych.

Dlaczego tryb ścisłego?

Surowy tryb ułatwia pisanie "bezpiecznego" JavaScript.

Ścisły tryb zmienia wcześniej akceptowane "złe składnię" w błędy realne.

Jako przykład, w normalnym JavaScript, manieję nazwy zmiennej tworzy nową zmienną globalną. W ścisłym trybie spowoduje to błąd, co uniemożliwią przypadkowe stworzenie zmiennej globalnej.

W normalnym JavaScript programista nie otrzyma żadnych błędów przypisujących wartości przypisywania właściwości nie-zapisywania.

W trybie ścisłym, wszelkie zadanie do właściwości nie-zapisywalnej, właściwość dla Gettera, nie istniejącą właściwość, nie istniejącą zmienną lub nie istniejącą obiekt, spowoduje błąd.

Proszę odnieść się do http://www.w3schools.com/js/js_strct.asp do wiedzieć więcej

43
Shog9 13 sierpień 2018, 03:15

"use strict" sprawia, że kod JavaScript do uruchomienia w trybie , co w zasadzie oznacza, że wszystko musi być zdefiniowane przed użyciem. Głównym powodem używania trybu ścisłego jest uniknięcie przypadkowych globalnych zastosowań niezdefiniowanych metod.

Również w trybie ścisłym, rzeczy biegają szybciej, niektóre ostrzeżenia lub ciche ostrzeżenia rzucają błędne błędy, lepiej jest zawsze używać, aby wykonać kod NEATER.

"use strict" jest powszechnie potrzebny do użycia w ECMA5, w ECMA6 jest częścią JavaScript domyślnie , więc nie musi być dodawany, jeśli używasz ES6.

Spójrz na te oświadczenia i przykłady z MDN:

Dyrektywa "Użyj ścisłej"
Dyrektywa "Użyj ścisłej" jest nowa JavaScript 1.8.5 (ECMAScript wersja 5). To nie jest oświadczenie, ale a dosłowne wyrażenie, ignorowane wcześniejszymi wersjami JavaScript. The. Cel "Strict" jest wskazywanie, że kod powinien być wykonane w "trybie ścisłym". Z ścisłym trybem nie możesz na przykład Użyj niezdecydowanych zmiennych.

Przykłady przy użyciu "Używaj ścisłego":
Ścisły tryb dla funkcji: również, aby wywołać ścisły tryb dla a Funkcja, umieść dokładną instrukcję "Użyj ścisłego"; (lub "użyć ścisłego";) w ciało funkcji przed innymi instrukcjami.

1) ścisły tryb w funkcjach

 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());

2) tryb ścisłego skryptu

'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);

3) Przypisanie do nieistotnego globalnego

'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError

Możesz Czytaj więcej na temat MDN.

38
Palec 30 sierpień 2018, 15:16

Istnieje dobra rozmowa przez niektórych ludzi, którzy byli w Komitecie ECMAScript: Zmiany w JavaScript, Część 1: ECMAScript 5 " o tym, jak przyrostowe użycie przełącznika {X0}} umożliwia implementacji JavaScript, aby oczyścić wiele niebezpiecznych funkcji JavaScript bez nagle łamania każdej strony na świecie.

Oczywiście mówi również o tym, co wiele z tych błędnych jest (były) i jak ECMAScript 5 poprawia je.

31
FutureNerd 29 marzec 2014, 19:39

Małe przykłady do porównania:

Tryb niezręczny:

for (i of [1,2,3]) console.log(i)
    
// output:
// 1
// 2
// 3

Tryb ścisły:

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

Tryb niezręczny:

String.prototype.test = function () {
  console.log(typeof this === 'string');
};

'a'.test();

// output
// false
String.prototype.test = function () {
  'use strict';
  
  console.log(typeof this === 'string');
};

'a'.test();

// output
// true
26
Tân 18 listopad 2018, 16:31

Należy pamiętać, że use strict została wprowadzona w ECMAScript 5 i od tego czasu był trzymany.

Poniżej przedstawiono warunki do wyzwalania ścisłego trybu w ES6 i ES7:

  • Global Code jest ścisłym kodem trybu, jeśli rozpoczyna się od dyrektywy Prolog, która zawiera stosowanie ścisłej dyrektywy (patrz 14.1.1).
  • Kod modułu jest zawsze ścisłym kodem trybu.
  • Wszystkie części classdeclareation lub klasy są ścisłym kodem trybu.
  • Kod eval jest ścisłym kodem trybu, jeśli rozpoczyna się od dyrektywy Prologu, która zawiera stosowanie ścisłej dyrektywy lub jeśli wezwanie do Evalu jest bezpośrednim Eval (patrz 12.3.4.1), które jest zawarte w ścisłym kodzie Tryb.
  • Kod funkcji jest ścisłym kodem trybu Jeśli powiązana funkcja Funkcjonariusza, funkcjonalizacja, generatCarakarara, generatorexpression, MetalDefinition lub ARROWFunkcja jest zawarta w ścisłym kodzie trybu lub jeśli kod, który wytwarza wartość funkcji [[ EcMascriptCode]] Gniazdo wewnętrzne rozpoczyna się od dyrektywy Prolog, która zawiera stosowanie ścisłej dyrektywy.
  • Kod funkcji, który jest dostarczany jako argumenty do wbudowanej funkcji, a konstruktorów generatora jest ścisły kod trybu, jeśli ostatni argument jest ciągiem, który po przetworzeniu jest funkcja Funkcjonalna , która rozpoczyna się od dyrektywy Prolog który zawiera stosowanie ścisłej dyrektywy.
19
Oriol 12 kwiecień 2016, 00:25

Tryb JavaScript "Ścisły" został wprowadzony w ECMAScript 5.

(function() {
  "use strict";
  your code...
})();

Pisanie "use strict"; na samym szczycie pliku JS włącza się na surowe Sprawdzanie składni. Wykonuje dla nas następujące zadania:

  1. Pokazuje błąd, jeśli spróbujesz przypisać do zmiennej niezarejestrowanej

  2. zatrzymuje się od nadpisywania bibliotek systemowych kluczy JS

  3. zabraniają niektórych niebezpiecznych lub bezpiecznych funkcji językowych

use strict działa również wewnątrz indywidualnych funkcji. Zawsze jest lepsza praktyka dołączenia use strict w kodzie.

Emisja zgodności przeglądarki: Dyrektywy "Użyj" mają być zgodne z powrotem. Przeglądarki, które ich nie obsługują, będą widoczne tylko dosłownie, który nie ma się powiązać. Więc przejdą go i ruszą dalej.

13
jkdev 6 luty 2019, 09:40

use strict to sposób, aby Twój kod był bezpieczniejszy, ponieważ nie możesz używać niebezpiecznych funkcji, które mogą pracować, jak się spodziewasz. I jak został wcześniej napisany, sprawia, że kod jest bardziej surowy.

13
SethO 13 styczeń 2020, 14:56

"Używaj ścisłego"; jest wysiłkiem ECMA, aby jak javascript trochę bardziej solidny. Przynosi JS próbę uczynienia go przynajmniej małym "ścisłym" (inne języki wdrażać ścisłe zasady od lat 90.). Właściwie "siły" programistów JavaScript, aby śledzić jakieś najlepsze praktyki kodujące. Mimo to javascript jest bardzo kruche. Nie ma czegoś takiego jak wpisane zmienne, metody wpisane itp. Zdecydowanie polecam programistom JavaScript, aby nauczyć się bardziej solidnego języka, takich jak Java lub ActionScript3, i wdrażać te same najlepsze praktyki w kodzie JavaScript, będzie działać lepiej i być łatwiejsze odpluskwić.

12
hologram 14 czerwiec 2016, 23:18

Zwykle JavaScript nie jest zgodny z surowymi zasadami, stąd zwiększenie szans na błędy. Po użyciu "use strict" kod JavaScript powinien być zgodny z surowym zestawem reguł, jak w innych językach programowania, takich jak stosowanie terminatorów, deklaracji przed inicjalizacją itp.

Jeśli używane jest "use strict", kod należy napisać, zgodnie z ścisłym zestawem reguł, a zatem zmniejszając szanse na błędy i niejasności.

12
Pang 4 styczeń 2019, 02:04

Użyj ścisłego ścisłego służy do pokazywania wspólnych i powtarzających się błędów, aby poruszać się inaczej i zmienia sposób, w jaki działa skrypt Java, takie zmiany to:

  • Zapobiega przypadkowemu globals.

  • Bez duplikatów

  • Eliminuje się

  • Eliminuje ten przymus

  • Safer Eval ()

  • Błędy dla submuntów

Możesz także przeczytać to Artykuł dla szczegółów

11
Wesam 17 październik 2016, 14:09

Tryb ścisłego może zapobiec wyciekom pamięci.

Sprawdź poniższą funkcję napisaną w trybie niezręcznym:

function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow

W tej funkcji używamy zmiennej o nazwie name wewnątrz funkcji. Wewnętrznie kompilator najpierw sprawdzi, czy istnieje jakaś zmienna zadeklarowana z taką szczególną nazwą w tym konkretnym zakresie funkcji. Ponieważ kompilator rozumiał, że nie ma takiej zmiennej, sprawdzi to w zasięgu zewnętrznym. W naszym przypadku jest to zakres globalny. Ponownie, kompilator rozumiał, że nie ma też zmiennej zadeklarowanej w przestrzeni globalnej z tą nazwą, więc tworzy taką zmienną dla nas w globalnej przestrzeni. Koncepcyjnie zmienna zostanie utworzona w globalnym zakresie i będzie dostępna w całej aplikacji.

Innym scenariuszem jest to, powiedzmy, zmienna jest zadeklarowana w funkcji dziecka. W takim przypadku kompilator sprawdza ważność tej zmiennej w zasięgu zewnętrznym, tj. Funkcja nadrzędna. Dopiero wtedy sprawdzi się w globalnej przestrzeni i stworzy dla nas zmienną. Oznacza to, że należy wykonać dodatkowe kontrole. Wpłynie to na wydajność aplikacji.


Napiszmy teraz tę samą funkcję w trybie ścisłym.

"use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 

Otrzymamy następujący błąd.

Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5

Tutaj kompilator rzuca błąd odniesienia. W ścisłym trybie kompilator nie pozwala nam korzystać ze zmiennej bez ich deklarowania. Więc można zapobiec wyciekom pamięci. Ponadto możemy napisać bardziej zoptymalizowany kod.

4
Pang 9 lipiec 2019, 06:01