Оператор delete существует для удаления свойств объекта; ваш пример работает только потому что вы не используете ключевые слова (var, let) для объявления переменной test, и поэтому она становится свойством объекта window.
"delete удаляет переменную" - это конечно не правда, delete не удаляет переменные, разве что под переменными вы подразумеваете такие случаи: переменные объявленные без ключевых слов, то есть свойства window.