Ðа пÑоÑÑжении долгого вÑемени JavaScript ÑазвивалÑÑ Ð±ÐµÐ· пÑоблем Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑÑÑ. ÐовÑе ÑÑнкÑии добавлÑлиÑÑ Ð² ÑзÑк, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº ÑÑаÑÐ°Ñ ÑÑнкÑионалÑноÑÑÑ Ð½Ðµ менÑлаÑÑ.
ÐÑеимÑÑеÑÑвом данного Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° бÑло Ñо, ÑÑо ÑÑÑеÑÑвÑÑÑий код пÑодолжал ÑабоÑаÑÑ. РнедоÑÑаÑком â ÑÑо лÑÐ±Ð°Ñ Ð¾Ñибка или неÑовеÑÑенное ÑеÑение, пÑинÑÑое ÑоздаÑелÑми JavaScript, заÑÑÑевали в ÑзÑке навÑегда.
Так бÑло до 2009 года, когда поÑвилÑÑ ECMAScript 5 (ES5). Ðн добавил новÑе возможноÑÑи в ÑзÑк и изменил некоÑоÑÑе из ÑÑÑеÑÑвÑÑÑиÑ
. ЧÑÐ¾Ð±Ñ ÑÑÑаÑевÑий код ÑабоÑал, как и ÑанÑÑе, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ пÑименÑÑÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ нÑжно Ñвно иÑ
акÑивиÑоваÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑпеÑиалÑной диÑекÑивÑ: "use strict".
«use strict»
ÐиÑекÑива вÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº ÑÑÑока: "use strict" или 'use strict'. Ðогда она наÑ
одиÑÑÑ Ð² наÑале ÑкÑипÑа, веÑÑ ÑÑенаÑий ÑабоÑÐ°ÐµÑ Ð² «ÑовÑеменном» Ñежиме.
ÐапÑимеÑ:
"use strict";
// ÑÑÐ¾Ñ ÐºÐ¾Ð´ ÑабоÑÐ°ÐµÑ Ð² ÑовÑеменном Ñежиме
...
СовÑем ÑкоÑо Ð¼Ñ Ð½Ð°ÑнÑм изÑÑаÑÑ ÑÑнкÑии (ÑпоÑоб гÑÑппиÑовки команд), поÑÑÐ¾Ð¼Ñ Ð·Ð°Ñанее оÑмеÑим, ÑÑо в наÑале болÑÑинÑÑва видов ÑÑнкÑий можно поÑÑавиÑÑ "use strict". ÐÑо позволÑÐµÑ Ð²ÐºÐ»ÑÑиÑÑ ÑÑÑогий Ñежим ÑолÑко в конкÑеÑной ÑÑнкÑии. Ðо обÑÑно лÑди иÑполÑзÑÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð²Ñего Ñайла.
ÐÑовеÑÑÑе, ÑÑо "use strict" наÑ
одиÑÑÑ Ð² пеÑвой иÑполнÑемой ÑÑÑоке ÑкÑипÑа, инаÑе ÑÑÑогий Ñежим Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ вклÑÑиÑÑÑÑ.
ÐдеÑÑ ÑÑÑогий Ñежим не вклÑÑÑн:
alert("some code");
// "use strict" ниже игноÑиÑÑеÑÑÑ - он должен бÑÑÑ Ð² пеÑвой ÑÑÑоке
"use strict";
// ÑÑÑогий Ñежим не акÑивиÑован
Ðад "use strict" могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ ÑолÑко комменÑаÑии.
use strictÐÐµÑ Ð´Ð¸ÑекÑÐ¸Ð²Ñ Ñипа "no use strict", коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑала Ð±Ñ Ð´Ð²Ð¸Ð¶Ð¾Ðº к ÑÑаÑÐ¾Ð¼Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ.
Ðак ÑолÑко Ð¼Ñ Ð²Ñ Ð¾Ð´Ð¸Ð¼ в ÑÑÑогий Ñежим, оÑмениÑÑ ÑÑо невозможно.
ÐонÑÐ¾Ð»Ñ Ð±ÑаÑзеÑа
РдалÑнейÑем, когда Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ ÐºÐ¾Ð½ÑÐ¾Ð»Ñ Ð±ÑаÑзеÑа Ð´Ð»Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑий, обÑаÑиÑе внимание, ÑÑо use strict по ÑмолÑÐ°Ð½Ð¸Ñ Ð² ней вÑклÑÑен.
Ðногда, когда use strict Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð½ÐµÐ¿ÑавилÑнÑе ÑезÑлÑÑаÑÑ.
ÐÑак, как можно вклÑÑиÑÑ use strict в конÑоли?
Ðожно иÑполÑзоваÑÑ Shift+Enter Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° неÑколÑкиÑ
ÑÑÑок и напиÑаÑÑ Ð² веÑÑ
ней ÑÑÑоке use strict:
'use strict'; <Shift+Enter Ð´Ð»Ñ Ð¿ÐµÑеÑ
ода на новÑÑ ÑÑÑокÑ>
// ...Ð²Ð°Ñ ÐºÐ¾Ð´...
<Enter Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка>
РболÑÑинÑÑве бÑаÑзеÑов, вклÑÑÐ°Ñ Chrome и Firefox, ÑÑо ÑабоÑаеÑ.
ÐÑли ÑÑого не пÑоиÑÑ
одиÑ, напÑимеÑ, в ÑÑаÑом бÑаÑзеÑе, еÑÑÑ Ð½ÐµÐºÑаÑивÑй, но надежнÑй ÑпоÑоб обеÑпеÑиÑÑ use strict. ÐомеÑÑиÑе его в ÑледÑÑÑÑÑ Ð¾Ð±ÑÑÑкÑ:
(function() {
'use strict';
// ...Ð²Ð°Ñ ÐºÐ¾Ð´...
})()
ÐÑегда ли нÑжно иÑполÑзоваÑÑ Â«use strict»?
ÐопÑÐ¾Ñ ÐºÐ°Ð¶ÐµÑÑÑ ÑиÑоÑиÑеÑким, но ÑÑо не Ñак.
ÐÑо-Ñо поÑовеÑÑÐµÑ Ð½Ð°ÑинаÑÑ ÐºÐ°Ð¶Ð´Ñй ÑкÑÐ¸Ð¿Ñ Ñ "use strict"⦠Ðо еÑÑÑ ÑпоÑоб покÑÑÑе.
СовÑеменнÑй JavaScript поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Â«ÐºÐ»Ð°ÑÑÑ» и «модÑли» â пÑодвинÑÑÑе ÑÑÑÑкÑÑÑÑ ÑзÑка (и мÑ, конеÑно, до ниÑ
добеÑÑмÑÑ), коÑоÑÑе авÑомаÑиÑеÑки вклÑÑаÑÑ ÑÑÑогий Ñежим. ÐоÑÑÐ¾Ð¼Ñ Ð² ниÑ
Ð½ÐµÑ Ð½ÑÐ¶Ð´Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð´Ð¸ÑекÑÐ¸Ð²Ñ "use strict".
ÐодÑÑожим: пока оÑÐµÐ½Ñ Ð¶ÐµÐ»Ð°ÑелÑно добавлÑÑÑ "use strict"; в наÑале ваÑиÑ
ÑкÑипÑов. Ðозже, когда веÑÑ Ð²Ð°Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ ÑоÑÑоÑÑÑ Ð¸Ð· клаÑÑов и модÑлей, диÑекÑÐ¸Ð²Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑÐ´ÐµÑ Ð¾Ð¿ÑÑкаÑÑ.
Ðока Ð¼Ñ Ñзнали о use strict ÑолÑко в обÑиÑ
ÑеÑÑаÑ
.
Ð ÑледÑÑÑÐ¸Ñ Ð³Ð»Ð°Ð²Ð°Ñ , по меÑе ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹ о возможноÑÑÑÑ ÑзÑка, Ð¼Ñ ÑÑнее Ñвидим оÑлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑÑогим и ÑÑандаÑÑнÑм Ñежимом. Ð ÑÑаÑÑÑÑ, Ð¸Ñ Ð½Ðµ Ñак много, и вÑе они делаÑÑ Ð¶Ð¸Ð·Ð½Ñ ÑазÑабоÑÑика лÑÑÑе.
ÐÑе пÑимеÑÑ Ð² ÑÑом ÑÑебнике подÑазÑмеваÑÑ Ð¸Ñполнение в ÑÑÑогом Ñежиме, за иÑклÑÑением ÑлÑÑаев (оÑÐµÐ½Ñ ÑÐµÐ´ÐºÐ¸Ñ ), когда оговоÑено иное.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)