una - tipos de funciones en javascript
Funciones de flecha vs funciones de flecha Fat (4)
He encontrado en internet sobre nombres, funciones de flechas y funciones de flechas gordas, pero no información sobre lo que es diferente entre ellos.
¿Hay alguna diferencia?
¿Hay alguna diferencia?
No.
Excepto que el término "función de flecha fat" está en desuso y obsoleto.
Esta respuesta no se aplica a CoffeeScript, en caso de que alguien todavía esté usando eso.
En CoffeeScript, las funciones de flechas gordas pasan en el ámbito de encapsulado, mientras que las flechas normales no.
Tal pregunta requiere un poco de explicación ...
ECMAScript 5
En la especificación ES5, no había funciones de flecha en absoluto. Entonces era común usar expresiones de funciones tradicionales como las siguientes:
// Example n°1
var myFunction = function () {
return ''Hello!'';
};
// Example n°2
var obj = {
myFunction: function () {
return ''Hello!'';
}
};
// Example n°3
var arr = [''foo'', ''bar''];
arr.map(function (item) {
return ''Hello, '' + item + ''!'';
};
CoffeeScript
Cuando CoffeeScript fue presentado por Jeremy Ashkenas, trajo una nueva terminología, especialmente funciones de flecha delgada ( ->
) y funciones de flecha de grasa ( =>
).
Por un lado, la función de flecha delgada es un equivalente de CoffeeScript de la expresión de función ES5 (anónima). En CoffeeScript, podríamos escribir los ejemplos anteriores así:
# Example n°1
myFunction = -> ''Hello!''
# Example n°2
obj =
myFunction: -> ''Hello!''
# Example n°3
arr = [''foo'', ''bar'']
arr.map((item) -> "Hello, #{item}!")
Por otro lado, la función de flecha de grasa es una buena utilidad proporcionada por CoffeeScript que no tiene una sintaxis equivalente en ES5. Su objetivo es jugar más fácilmente con el alcance léxico, especialmente cuando desea mantener el exterior esto en una devolución de llamada. Tomemos un ejemplo universal con CoffeeScript y la legendaria devolución de llamada jQuery. Supongamos que estamos en el ámbito global:
// Here "this" is "window"
console.log(this);
$(document).ready(function () {
// Here "this" is "document"
console.log(this);
});
Si queremos manipular el "this" externo en la devolución de llamada, aquí está el código ES5:
var that = this;
$(document).ready(function () {
console.log(that);
});
Con CoffeeScript, es posible utilizar una función de flecha de grasa en su lugar:
// "this" is "window"!
$(document).ready => console.log this
Por supuesto, no funcionaría con una función de flecha delgada :
// "this" is "document"
$(document).ready -> console.log this
ECMAScript 6 (2015)
La especificación ES2015 introdujo funciones de flecha . Son una alternativa a las funciones de la flecha fat en CoffeeScript. Pero dado que no hay funciones de flecha delgadas en ES6, no hay ninguna razón para hablar sobre las funciones de la flecha fat cuando no se utiliza CoffeeScript. En ES6, harías esto:
// Here "this" is "window"
$(document).ready(() => console.log(this));
Ahora, si desea conservar el comportamiento normal del alcance léxico, solo use la sintaxis de ES5:
$(document).ready(function () {
// Here "this" is "document"
console.log(this);
});
De la etiqueta wiki : (Desde enmendada)
Una sintaxis de función en CoffeeScript y nueva en JavaScript con EcmaScript6 que se asemeja sintácticamente a las funciones lambda de otros lenguajes pero no es solo azúcar sintáctica. CoffeeScript tiene ambos "->" y "=>", mientras que JavaScript tiene solo el último, que también se conocen como "funciones de flecha fat" .
Entonces cuando se usan con referencia a JS, son lo mismo.