typescript - ¿Hay alguna manera de nombrar funciones flecha en JavaScript?
Estoy usando funciones flecha en una aplicación y a veces surge la necesidad de obtener una referencia a la función en sí. Para funciones normales de JavaScript, puedo simplemente nombrarlas y usar el nombre desde dentro. Para funciones flecha, actualmente estoy usando arguments.callee. ¿Hay alguna manera de nombrar funciones flecha para que se pueda usar una referencia desde dentro?
Código de ejemplo
// TypeScript
private evaluateIf(expr: parserModule.IIfExpression, callback: IEnvCallback) {
this.evaluate(expr.condition, proceed => {
guard(arguments.callee, arguments, this);
if (proceed !== false) this.evaluate(expr.then, callback);
else if (expr.else) this.evaluate(expr.else, callback);
else callback(false);
});
}
// JavaScript
Environment.prototype.evaluateIf = function (expr, callback) {
var _this = this;
this.evaluate(expr.condition, function (proceed) {
guard(arguments.callee, arguments, _this);
if (proceed !== false)
_this.evaluate(expr.then, callback);
else if (expr.else)
_this.evaluate(expr.else, callback);
else
callback(false);
});
};
A lo que me decidí después de la ayuda, ya que los argumentos podrían no estar allí para siempre:
private evaluateIf(expr: parserModule.IIfExpression, callback: IEnvCallback) {
var fn;
this.evaluate(expr.condition, fn = proceed => {
guard(fn, [proceed], this);
if (proceed !== false) this.evaluate(expr.then, callback);
else if (expr.else) this.evaluate(expr.else, callback);
else callback(false);
});
}
Respuesta #1
¿Hay una manera de nombrar funciones flecha para que se pueda usar una referencia desde dentro?
No a menos que lo asignes a una variable. Por ejemplo:
var foo = () => {
console.log(foo);
}
Para las funciones flecha, actualmente estoy usando arguments.callee
Los arguments no son compatibles con las funciones flecha. TypeScript actualmente permite usarlos incorrectamente. Esto será un error en la próxima versión de TypeScript. Esto es para mantener las funciones flecha de TypeScript compatibles con la Especificación del Lenguaje JavaScript.
Para tu caso de uso, solo usaría una función.
