| 
		
			Сообщение от DjDiablo
			
		
	 | 
	| 
		Не выдумывай
	 | 
	
так не интересно ничего не выдумывать 
Недавно адаптировал скрипт для работы в браузере, ну и чтобы работало в IE8, убирал из скрипта NFE, например:
document.addEventListener("click", function callback(event) {
     document.removeEventListener("click", callback);
     …
});
нужно переделать в:
function callback(event) {
     document.removeEventListener("click", callback);
     …
}
document.addEventListener("click", callback);
Но это муторно все функции переделывать в FD, иногда имена совпадают, не всегда нужны эти функции в общем скопе и т.д.
arguments.callee использовать нельзя, потому что весь код в strict режиме исполняется в нормальных браузерах.
Можно облегчить себе жизнь, написав функцию, наподобие 
bind, но выполняющую привязку только для первого аргумента, и в качестве значения этого аргумента должна отправляться ссылка на bound-функцию:
function nfe(targetFunc) {
    function boundFunc() {
        Array.prototype.unshift.call(arguments, boundFunc);
        return targetFunc.apply(this, arguments);
    }
    return boundFunc;
}
Теперь можно делать так:
document.addEventListener("click", nfe(function (callback, event) {
    document.removeEventListener("click", callback);
    …
}));
или так:
setTimeout(nfe(function (onTime) {
    …
    setTimeout(onTime, 100);
}), 100);