Sobes.tech
Middle

Qual é a diferença entre closures em PHP e JavaScript?

sobes.tech IA

Resposta da IA

A principal diferença reside na forma como são criados e utilizados:

  • PHP: Os closures são objetos da classe Closure. São criados usando a palavra-chave function (para funções anónimas) e podem importar explicitamente variáveis do âmbito superior usando a palavra-chave use. As variáveis são importadas por valor por padrão, mas pode-se usar & para importação por referência.
  • JavaScript: Os closures são criados naturalmente ao definir uma função dentro de outra função. A função interna tem acesso às variáveis da função externa e ao seu âmbito. As variáveis são capturadas por referência (ou por valor em tipos primitivos e cópia).

Em PHP, os closures são mais explícitos graças à sintaxe use, enquanto que em JavaScript este mecanismo é mais transparente para o programador.

Exemplo em PHP:

<?php
function outerFunction($x) {
    return function() use ($x) { // Importação explícita de $x
        echo $x;
    };
}

$closure = outerFunction("Olá");
$closure(); // Saída: Olá

Exemplo em JavaScript:

function outerFunction(x) {
  return function() { // Acesso implícito a x
    console.log(x);
  };
}

const closure = outerFunction("Olá");
closure(); // Saída: Olá