Используя решение Лиран, я добавляю исправление для Objects
, вот правильное решение:
function retrieveWindowVariables(variables) {
var ret = {};
var scriptContent = "";
for (var i = 0; i < variables.length; i++) {
var currVariable = variables[i];
scriptContent += "if (typeof " + currVariable + " !== 'undefined') $('body').attr('tmp_" + currVariable + "', JSON.stringify(" + currVariable + "));\n"
}
var script = document.createElement('script');
script.id = 'tmpScript';
script.appendChild(document.createTextNode(scriptContent));
(document.body || document.head || document.documentElement).appendChild(script);
for (var i = 0; i < variables.length; i++) {
var currVariable = variables[i];
ret[currVariable] = $.parseJSON($("body").attr("tmp_" + currVariable));
$("body").removeAttr("tmp_" + currVariable);
}
$("#tmpScript").remove();
return ret;
}
Функциональное программирование с бананами, линзами, конвертами и колючей проволокой (PDF) также должны помочь.
Начните с изучения катаморфизмов; их легче всего понять. Вы уже знаете один: foldr
!
Тогда переходите к анаморфизму ( развёртка
) и параморфизму. Только после этого переходите к другим статьям / статьям Википедии; к тому времени их будет легче понять.
Эдвард Кметт недавно опубликовал Полевое руководство по схемам рекурсии , может быть, это поможет?