Простым языком о замыканиях?
1. Для чего замыкание существуют?Для инкапсуляции данных.
В ООП есть модификаторы доступа (private, protected), которые закрывают доступ к данным извне класса, но позволяют обращаться к ним из методов.
В ФП для этой задачи используют замыкания, закрывая данные внутри функции. Из вне данные недоступны, но вложенные функции имеют к ним доступ.2. В каких условиях они создаются?Когда вложенная функция обращается к переменным внешней функции.
Хоть и просили без примеров, но на примере показать проще:// makeCounter - внешняя функция
function makeCounter(initialValue) {
  var value = +initialValue || 0;
  // counter - внутренняя функция
  // она использует переменную value из внешней функции
  // что-бы это было возможным, для counter создается замыкание,
  // в котором хранится переменная value
  // переменная initialValue функции counter не нужна, поэтому ее можно "забыть"
  return function counter() {
    return value++;
  };
}

// у нас 3 экземпляра функции counter
var counter1 = makeCounter();
var counter2 = makeCounter();
var counter3 = makeCounter(100);
// и для каждой есть своя переменная value
console.log(counter1()); // 0
console.log(counter1()); // 1
console.log(counter2()); // 0
console.log(counter1()); // 2
console.log(counter3()); // 100

// а вот получить как-то напрямую переменную value мы не можем
// инкапсуляция нам не дает поломать данные
Замыкание это функция и доступные ей внешние переменные
Переменная недоступна для функции (находится в соседней функции) - замыкания нет
Вынесли объявление переменной в область видимости выше - замыкание появилось