Происходит то, что код, который пытается использовать свойство caller
функции, вызывается кодом строгого режима.Пример:
function attemptToUseCaller() {
console.log(attemptToUseCaller.caller.name);
}
function loose() {
attemptToUseCaller();
}
function strict() {
"use strict";
attemptToUseCaller();
}
loose();
strict();
Если вы запустите это в современной версии Firefox, вы увидите это в консоли:
loose
TypeError: access to strict mode caller function is censored
Как выможно увидеть, что доступ к attemptToUseCaller.caller
работал, когда вызывающая функция была в свободном режиме, но не получался, когда вызывающая функция была в строгом режиме.Доступ к свойству caller
запрещен в строгом режиме и даже запрещен при использовании в «свободном» коде, если функция вызывающей стороны сама является строгой.Firefox вызывает конкретную ошибку, в то время как в JavaScript-движке Chrome V8 он просто возвращает значение null
для .caller
в строгом режиме.
Использование caller
- это анти-паттерн,Вам нужно будет форкировать любой сторонний код, который его использует, и исправить его.