JavaScript. Подробное руководство, 6-е издание, стр. 59
<b>function f(o) {</b><b>if (о === undefined) debugger; // Временная строка для отладки</b><b>// Далее продолжается тело функции.</b>Теперь, когда f() будет вызвана без аргумента, ее выполнение будет приостановлено, и вы сможете воспользоваться отладчиком и просмотреть стек вызовов, чтобы отыскать место, откуда был выполнен некорректный вызов.
Официально инструкция
<b>debugger</b><b>debugger</b><b>debugger</b>5.7.3. "use strict"
"
<b>use strict</b><b>use strict</b><b>use strict</b>• Она не включает никаких зарезервированных слов языка: директива - это лишь выражение, содержащее специальный строковый литерал (в одиночных или двойных кавычках). Интерпретаторы JavaScript, не соответствующие стандарту ECMAScript 5, будут интерпретировать ее как простое выражение без побочных эффектов и ничего не будут делать. В будущих версиях стандарта ECMAScript, как ожидается, слово use будет переведено в разряд ключевых слов, что позволит опустить кавычки.
• Она может появляться только в начале сценария или в начале тела функции, перед любыми другими инструкциями. Однако она не обязательно должна находиться в самой первой строке сценария или функции: директиве
<b>"use strict"</b>Назначение директивы
<b>"use strict"</b><b>"use strict".</b><b>"use strict</b><b>eval(),</b><b>eval()</b><b>"use strict".</b>Строгий программный код выполняется в строгом режиме. Согласно стандарту ECMAScript 5, строгий режим определяет ограниченное подмножество языка, благодаря чему исправляет некоторые недостатки языка, а также обеспечивает более строгую проверку на наличие ошибок и повышенный уровень безопасности. Ниже перечислены различия между строгим и нестрогим режимами (первые три имеют особенно большое значение):
• В строгом режиме не допускается использование инструкции
<b>with</b>• В строгом режиме все переменные должны объявляться: если попытаться присвоить значение идентификатору, который не является объявленной переменной, функцией, параметром функции, параметром конструкции
<b>catch</b><b>ReferenceError</b>• В строгом режиме функции, которые вызываются как функции (а не как методы), получают в ссылке
<b>this</b><b>undefined</b><b>this</b><b>var hasStrictMode = (function() { "use strict"; return this===undefined}());</b>Кроме того, когда функция вызывается в строгом режиме с помощью
<b>саll()</b><b>аррlу(),</b><b>this</b><b>саll()</b><b>аррlу()</b><b>null</b><b>undefined</b>• В строгом режиме попытки присвоить значения свойствам, недоступным для записи, или создать новые свойства в нерасширяемых объектах порождают исключение
<b>TypeError</b>• В строгом режиме программный код, передаваемый функции
<b>eval(),</b><b>eval().</b><b>eval()</b>• В строгом режиме объект
<b>arguments </b><b>arguments</b><b>arguments</b>• В строгом режиме возбуждается исключение
<b>SyntaxError</b><b>delete</b><b>delete</b><b>false</b>