Sobes.tech
Middle

Aký je rozdiel medzi uzávermi v PHP a JavaScript?

sobes.tech AI

Odpoveď od AI

Kľúčový rozdiel spočíva v spôsobe, akým sú vytvárané a používané:

  • PHP: Uzávierky sú objekty triedy Closure. Sú vytvárané pomocou kľúčového slova function (pre anonymné funkcie) a môžu explicitne importovať premenné z nadradeného rozsahu pomocou kľúčového slova use. Premenné sa štandardne importujú hodnotou, ale je možné použiť & na importovanie odkazom.
  • JavaScript: Uzávierky sú prirodzene vytvárané pri definovaní funkcie vo vnútri inej funkcie. Vnorená funkcia má prístup k premenným vonkajšej funkcie a jej rozsahu. Premenné sú zachytávané odkazom (alebo hodnotou pri primitívnych typoch a kópiách).

V PHP sú uzávierky jasnejšie vďaka syntaxe use, zatiaľ čo v JavaScript je tento mechanizmus pre vývojára transparentnejší.

Príklad v PHP:

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

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

Príklad v JavaScript:

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

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