Почему "использовать строгое" назначение функции разрыва внутри пространства имен для глобальной области видимости?
У меня есть код библиотеки делает простое назначение функции. Эта функция доступна из глобальной области видимости.
Когда я добавлю "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 неопределенным