Sobes.tech
Middle

Jaký je rozdíl mezi uzávěry v PHP a JavaScript?

sobes.tech AI

Odpověď od AI

Hlavní rozdíl spočívá v tom, jak jsou vytvářeny a používány:

  • PHP: Uzávěry jsou objekty třídy Closure. Jsou vytvářeny pomocí klíčového slova function (pro anonymní funkce) a mohou explicitně importovat proměnné z nadřazeného rozsahu pomocí klíčového slova use. Proměnné jsou importovány výchozí hodnotou, ale lze použít & pro import odkazem.
  • JavaScript: Uzávěry jsou přirozeně vytvářeny při definování funkce uvnitř jiné funkce. Vnořená funkce má přístup k proměnným vnější funkce a jejímu rozsahu. Proměnné jsou zachyceny odkazem (nebo hodnotou u primitivních typů a kopie).

V PHP jsou uzávěry explicitnější díky syntaxi use, zatímco v JavaScriptu je tento mechanismus pro vývojáře transparentnější.

Příklad v PHP:

<?php
function outerFunction($x) {
    return function() use ($x) { // Explicitní import
        echo $x;
    };
}

$closure = outerFunction("Ahoj");
$closure(); // Výstup: Ahoj

Příklad v JavaScriptu:

function outerFunction(x) {
  return function() { // Implicitní přístup
    console.log(x);
  };
}

const closure = outerFunction("Ahoj");
closure(); // Výstup: Ahoj