Regular Functions
- Escopo Global (Contexto de execução)
- Possui a palavra reservada this: SIM.
- Faz Hoisting: SIM.
- Palavra reservada "this": SIM
- Parâmetros com nome duplicado: SIM SIM é permitido, mas não no modo ESTRITO.
// Irá imprimir o último parametro (valor)
function fn(x, x){ console.log(x) }
// Modo estrito
'use strict';
function fn(x, x){ console.log(x) }
// Duplicate parameter name not allowed in this context
OBS: Método apply() e bind() podem ser usados para fixar o contexto de criação passando o this como parametro, independente da execução.
Arrow Functions
- Escopo de Função (Contexto de criação)
- Possui a palavra reservada this: NÃO.
- Faz Hoisting: NÃO.
- Contexto de Bloco (léxico, entre chaves {}), de criação
- Parâmetros com nome duplicado: NÃO
let value = (x, x) => console.log(x + x);
// Duplicate parameter name not allowed in this context
Exemplo
let eu = {
name: "Heviane",
thisInArrow: () => {
console.log('Arrow: ' + this.name);
},
thisInRegular(){
console.log('Regular: ' + this.name);
}
};
eu.thisInArrow(); // NÃO funciona
eu.thisInRegular(); // SIM funciona