y-комбинатор в JavaScript :
var Y = function(f) {
return (function(g) {
return g(g);
})(function(h) {
return function() {
return f(h(h)).apply(null, arguments);
};
});
};
var factorial = Y(function(recurse) {
return function(x) {
return x == 0 ? 1 : x * recurse(x-1);
};
});
factorial(5) // -> 120
Редактировать : я многому учусь, глядя на код, но этот довольно сложно проглотить без некоторого фона - извините за это. С некоторыми общими знаниями, представленными другими ответами, вы можете начать разбирать происходящее.
Функция Y - это «y-комбинатор». Теперь взглянем на линию var factorial
, где используется Y. Обратите внимание, что вы передаете ему функцию, у которой есть параметр (в этом примере recurse
), который также используется позже во внутренней функции. Имя параметра в основном становится именем внутренней функции, позволяющей ему выполнять рекурсивный вызов (поскольку в своем определении он использует recurse()
). Y-комбинатор выполняет магию, связывая иначе анонимную внутреннюю функцию с именем параметра функция передана Y.
Для полного объяснения того, как Y делает волшебство, проверил связанную статью (не мной, между прочим.)
Реальный тонкий клиент RTC и удаленные функции идеально подходят для этого.
Я бы опрашивал веб-сервис из клиентского приложения, а не пытался установить соединение от сервера к браузеру.
Я бы забыл о проблемах совместимости с браузером (как вы думаете, вы остановите использование IE8? ) и используйте компонент браузера PBear напрямую. Используя это, вы можете легко перехватить свои ссылки и, таким образом, обнаружить любую ссылку, которую хотите. В моем приложении есть такие вещи, как «act: // actHelp», я определяю тип ссылки как «act», а затем ищу действие с именем «actHelp». Если есть, выполняю. Вы также можете предварительно проанализировать HTML-код, чтобы найти эти ссылки, и вставить изображение значка, используемого действием, таким образом, совпадая с вашим пользовательским интерфейсом и обеспечивая его актуальность.
Выполните интеграцию и забудьте о проблемах с внешним браузером.