Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ strict Π² JavaScript

РассмотрСли строгий Ρ€Π΅ΠΆΠΈΠΌ strict Π½Π° JavaScript, ΠΈ обсудили, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΊΠΎΠ΄.

ОблоТка: Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ strict Π² JavaScript

JavaScript β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык программирования для Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Однако Π΅Π³ΠΎ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹ΠΌ послСдствиям, поэтому Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для сопровоТдСния ΠΊΠΎΠ΄.

Один ΠΈΠ· способов Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «строгий Ρ€Π΅ΠΆΠΈΠΌΒ» JavaScript ΠΈΠ»ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Strict.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим Ρ€Π΅ΠΆΠΈΠΌ strict Π½Π° JavaScript, обсудим, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΊΠΎΠ΄.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΠΆΠΈΠΌ Strict

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ Strict β€” это функция, прСдставлСнная Π² ECMAScript 5 (ES5), которая позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ строгий ΠΈ бСзопасный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ JavaScript.

ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠ½ примСняСт строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ограничСния, помогая Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ распространСнныС ошибки ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ качСство ΠΊΠΎΠ΄Π°. Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ ограничСния.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строгий Ρ€Π΅ΠΆΠΈΠΌ

  1. ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ошибок. Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π±Ρ‹.
  2. УпрощСнная ΠΎΡ‚Π»Π°Π΄ΠΊΠ°. Благодаря Ρ€Π°Π½Π½Π΅ΠΌΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ошибок строгий Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.
  3. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. НСкоторыС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ устраняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Π΅ ошибкам Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ языка.
  4. Π—Π°Π±ΠΎΡ‚Π° ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ использованиС ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ скоро станут ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ, помогая Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ совмСстимым с Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями JavaScript.

Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ строгий Ρ€Π΅ΠΆΠΈΠΌ

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строгого Ρ€Π΅ΠΆΠΈΠΌΠ° выполняСтся прямо Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π° JavaScript:

			"use strict";
		

Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript ΠΎ нСобходимости примСнСния ΠΏΡ€Π°Π²ΠΈΠ»Β Strict для всСго Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ появляСтся.

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строгого Ρ€Π΅ΠΆΠΈΠΌΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ скриптС ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ влияСт Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ скрипты ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ИспользованиС строгого Ρ€Π΅ΠΆΠΈΠΌΠ° Π² Node

Node Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ строгий Ρ€Π΅ΠΆΠΈΠΌ. Π£ вас Π΅ΡΡ‚ΡŒ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° с этим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ "use strict"; Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π² Node.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» Ρ‡Π΅Ρ€Π΅Π· cli Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅:

			node --use_strict
		

Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ β€” Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ всё ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π Π΅ΠΆΠΈΠΌ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅.

Если сторонняя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅, вас оповСстят ΠΎΠ± этом, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Strict.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Strict-Ρ€Π΅ΠΆΠΈΠΌΠ°

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ примСняСт нСсколько ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство ΠΊΠΎΠ΄Π°. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π’ строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов var, let ΠΈΠ»ΠΈ const ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка.

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ случайноС созданиС глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

			// Non-strict mode
undeclaredVariable = 42; // Creates a global variable

// Strict mode
"use strict";
undeclaredVariable = 42; // Throws a ReferenceError
		

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ синтаксичСская ошибка.

			// Non-strict mode
function duplicateParameters(a, a) { // No error
}

// Strict mode
"use strict";
function duplicateParameters(a, a) { // Throws a SyntaxError
}
		

Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0123) Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡ… использования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ синтаксичСской ошибкС. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ прСфикс 0o для Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… чисСл.

			// Non-strict mode
var octal = 0123; // No error

// Strict mode
"use strict";
var octal = 0123; // Throws a SyntaxError
var octal = 0o123; // Correct octal syntax in strict mode
		

НазначСниС свойств Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния

Π’ строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойству, доступному Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ undefined, ΠΈΠ»ΠΈ свойству Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния встроСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС TypeError.

			// Non-strict mode
undefined = 42; // No error

// Strict mode
"use strict";
undefined = 42; // Throws a TypeError
		

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ with

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ with Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΌΡƒ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

ИспользованиС with Π² строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ синтаксичСской ошибкС.

			// Non-strict mode
with (object) {
  // Do something with object's properties
}

// Strict mode
"use strict";
with (object) { // Throws a SyntaxError
}
		

ИзмСнСния eval

Π’ строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅ eval ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° eval, Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, присвоСниС eval ΠΈΠ»ΠΈ использованиС Π΅Π³ΠΎ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ.

			// Non-strict mode
eval("var localVar = 42;");
console.log(localVar); // Logs 42

// Strict mode
"use strict";
eval("var localVar = 42;");
console.log(localVar); // Throws a ReferenceError
		

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this

Π’ нСстрогом Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Π±Π΅Π· явного получатСля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² качСствС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°), ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π’ строгом Ρ€Π΅ΠΆΠΈΠΌΠ΅ this являСтся undefined, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ случайныС измСнСния глобального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

			// Non-strict mode
function logThis() {
  console.log(this);
}
logThis(); // Logs the global object (e.g., `window` in browsers)

// Strict mode
"use strict";
function logThis() {
  console.log(this);
}
logThis(); // Logs `undefined`
		

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ JavaScript β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π² сопровоТдСнии ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΊΠΎΠ΄.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ Π±ΠΎΠ»Π΅Π΅ строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ограничСния, строгий Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ распространСнныС ошибки кодирования, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями JavaScript.

Поняв ΠΈ приняв строгий Ρ€Π΅ΠΆΠΈΠΌ, Π²Ρ‹ смоТСтС ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ свои Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ JavaScript ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ качСствСнныС Π²Π΅Π±-прилоТСния.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ