Javascript 'this' перезаписывает в Z комбинатор и любую другую рекурсивную функцию
Фон:
У меня есть рекурсивная функция, реализованнаяZ-комбинатор как показаноВот а такжеВот поэтому он не используетarguments.callee
так как это будет устаревшим в предстоящемES6.
вопрос
Основная проблема сZ-комбинатор и все рекурсивные анонимные функции, которые я видел до сих пор, заключаются в том, что они обновляют деthis
значение для внутренней области видимости функции (самоотдача вreturn
пункт), поэтомуthis
который ссылается на верхний уровень, потерян, и я хочу поддерживать его через все внутренние функции.
Есть ли способ поддерживать верхний уровеньthis
без передачи его в качестве дополнительного аргумента функции, который является наиболее очевидным способом избавления от этой проблемы, но не так чист, как я хочу?
РЕДАКТИРОВАТЬ:
Прямо сейчас я решаю проблему, передавая вершинуthis
ссылка наZ-комбинатор нравится:
Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
в рекурсивной функции я возвращаю ту же функцию, передавая top это значение следующим образом:
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
/* Some other code. */
return callee(LOM_section.children[widget], self);
}
Это моеZ-комбинатор определение:
function Z(func:any):any {
var f = function () {
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
Спасибо