функция возвращающая функцию

Задача - простое сравнение чисел, однако метод интересный, собственно условие.
"Функция compare() принимает целочисленное x и возвращает анонимную функцию. Анонимная функция должна принимать целочисленное значение y и возвращать результат сравнения значений y и x в виде
если y > x возврат true
если y < x возврат false
если y = x возврат 0
"
Решение составил полуинтуитивно, оно работает верно(мой вопрос после решения ниже):


function compare(x){
return function (y) {
if(y>x) return true
else if (y<x) return false
else if (y == x) return 0
else return alert(‘Something wrong’);
}
}


Я не понимаю как работает этот механизм сравнения, дальше пишем в консоль

  • var asd = compare(100); // присваиваем внешней функции значение аргумента x 100
  • asd(101);// возврат true
  • asd(99);// возврат false
  • asd(100);// возврат 0

Каким образом работает сравнение?

Как я вижу этот механизм
при вводе var asd = compare(100) присваиваем значение 100 аргументу x и значение функции compare с этим параметром присваивается переменной asd, но последующие вызовы переменной с параметрами должны затирать предыдущие значения, а не сравнивать новое с первым.
Как работает этот код?
Спасибо.

Механизм, который делает возможным работу твоего кода называется “замыкания”. Вот тут хорошая подробная статья http://habrahabr.ru/post/38642/

Вот еще статья на эту тему https://learn.javascript.ru/closures-usage

А вот задачи на понимание замыканий:
http://jscourse.com/task/compose
http://jscourse.com/task/incapsulated-counter