Почему "использовать строгое" назначение функции разрыва внутри пространства имен для глобальной области видимости?

У меня есть код библиотеки делает простое назначение функции. Эта функция доступна из глобальной области видимости.

Когда я добавлю "use strict" в начале файла я получаю сообщение об ошибке TypeError: a is undefined по поручению a.b,

"use strict"; /* Remove this and 'a' is defined */
(function() {
  var a = this;
  a.b = function() {
    document.getElementById('test').innerHTML = 'abc';
  };
})();
b();
<div id="test"></div>

Почему я получаю эту ошибку, учитывая, что var a объявлено на предыдущей строке?

1 ответ

Решение

Глобальная утечка

Существует ряд ситуаций, в которых это может быть связано с глобальным объектом. Например, если вы забудете предоставить новый префикс при вызове функции конструктора, конструктор this будет неожиданно привязан к глобальному объекту, поэтому вместо инициализации нового объекта он вместо этого будет молча вмешиваться в глобальные переменные. В этих ситуациях строгий режим вместо этого свяжет это с неопределенным, что заставит конструктор вместо этого выдать исключение, что позволит обнаружить ошибку намного быстрее.

так что у вас нет a как это, но ваш a не определен, поэтому вы не можете сделать b неопределенным

Другие вопросы по тегам