Стремясь выстроить числовые литералы, разработчик непреднамеренно инициализировал переменную b
с восьмеричным литералом. В нестрогом режиме это будет интерпретироваться как числовой литерал со значением 24
(в базе 10). Однако строгий режим выдаст ошибку.
Область
Исторически JavaScript был сбит с толку о том, как функционирует
ограничены Иногда они кажутся статически ограниченными, но некоторые
особенности заставляют их вести себя так, как будто они динамически ограничены. Это
сбивает с толку, делает программы трудными для чтения и понимания.
Непонимание вызывает ошибки. Это также является проблемой для производительности.
Статическая область видимости позволит связывать переменные при компиляции
время, но требование динамической области означает, что привязка должна быть
откладывается на время выполнения, что обеспечивает значительную производительность
штраф.
Строгий режим требует статического связывания всех переменных.
Это означает, что функции, которые ранее требовали динамического связывания
должны быть устранены или изменены. В частности, с оператором является
устранена, и способность функции eval вмешиваться в
среда его вызова строго ограничена.
Одним из преимуществ строгого кода является то, что такие инструменты, как YUI Compressor
может лучше выполнять работу при обработке.
подразумеваемые глобальные переменные
JavaScript подразумевает глобальные переменные. Если
Вы явно не объявляете переменную, глобальная переменная
неявно заявлено для вас. Это облегчает программирование для
новички, потому что они могут пренебречь некоторыми из их основной уборки
хозяйственные работы. Но это делает управление большими программами намного более
сложно и это значительно снижает надежность. Так что в строгом
режим, подразумеваемые глобальные переменные больше не создаются. Вам следует
явно объявите все ваши переменные.
Глобальная утечка
Существует ряд ситуаций, которые могут вызвать this
быть привязанным к глобальному объекту. Например, если вы забудете
предоставить префикс new
при вызове функции конструктора,
this
конструктора будет неожиданно связан с глобальным объектом, поэтому
вместо инициализации нового объекта, он будет молча
вмешательство в глобальные переменные. В этих ситуациях строгий режим будет
вместо этого свяжите this
с undefined
, что заставит конструктор
вместо этого выведите исключение, позволяющее обнаружить ошибку
рано.
Шумный отказ
JavaScript всегда имел свойства только для чтения, но вы
не мог создать их самостоятельно до ES5's Object.createProperty
функция раскрыла эту возможность. Если вы пытались присвоить значение
для свойства только для чтения, он молча потерпит неудачу. Назначение будет
не изменяйте значение свойства, но ваша программа будет работать как
хотя это было. Это угроза целостности, которая может привести к тому, что программы
перейти в противоречивое состояние. В строгом режиме пытается изменить
свойство только для чтения вызовет исключение.
восьмиштырьковый
восьмеричное (или базовое 8) представление чисел было чрезвычайно
полезно при программировании на уровне машин на машинах, чье слово
размеры были кратны 3. Вам нужно восьмеричное при работе с CDC
6600 мэйнфреймов, размер слова которых составлял 60 бит. Если бы вы могли читать
восьмеричное, вы можете посмотреть на слово как 20 цифр. Две цифры представлены
код операции и одна цифра идентифицировали один из 8 регистров. В течение
медленный переход от машинных кодов к языкам высокого уровня, это было
считается полезным для предоставления восьмеричных форм в языках программирования.
В Си крайне неудачное представление восьмеричности было
выбрано: ведущий ноль. Таким образом, в C 0100
означает 64, а не 100, а 08
является
ошибка, а не 8. Еще более, к сожалению, этот анахронизм был
скопированы почти на все современные языки, включая JavaScript, где
он используется только для создания ошибок. У него нет другой цели. Так в
строгий режим, восьмеричные формы больше не разрешены.
и так далее
Псевдомассив аргументов становится немного больше
массив как в ES5. В строгом режиме он теряет callee
и caller
свойства. Это позволяет передать ваш arguments
ненадежным
код, не отказываясь от большого количества конфиденциального контекста. Так же
arguments
свойство функций исключено.
В строгом режиме дубликаты клавиш в функциональном литерале создадут
ошибка синтаксиса. Функция не может иметь два параметра с одинаковым именем.
Функция не может иметь переменную с тем же именем, что и одна из ее
параметры. Функция не может delete
своих собственных переменных. Попытка
delete
ненастраиваемое свойство теперь вызывает исключение. Примитивный
значения не переносятся неявным образом.
ECMAScript 5 добавляет список зарезервированных слов. Если вы используете их в качестве переменных или аргументов, строгий режим выдаст ошибку. Зарезервированные слова: