Устаревшие возможности JavaScript могут ещё работать в старом проекте, но для нового кода их выбирать не стоит. Часть конструкций удалена из языка, а часть сохранена ради совместимости и ведёт себя не во всех средах одинаково.
Что встречается в старом коде
with скрывает, к какому объекту относится имя переменной, и запрещён в строгом режиме. arguments.callee обращается к выполняемой функции через объект аргументов и тоже недоступен в строгом режиме. Функции escape() и unescape() не подходят для современных URL: для компонентов адреса используют encodeURIComponent() и decodeURIComponent(). Вместо String.prototype.substr() обычно выбирают slice().
Как обновлять код
Сначала найдите вызовы устаревшей возможности и зафиксируйте их поведение тестами. Затем замените конструкцию на современную с теми же входными данными и проверьте крайние случаи: пустые строки, отрицательные индексы, обработку ошибок. Не делайте массовую замену по совпадению слова: например, substr() и slice() по-разному понимают второй аргумент.
const query = encodeURIComponent("кофе & чай");
console.log(query); // безопасный компонент URL
Раздел помогает распознавать старый синтаксис при поддержке проекта. Для нового кода ориентируйтесь на стандартизованные возможности и проверяйте поддержку конкретной среды выполнения.