まとメモ

29才でエンジニアに転職したエンジニアのメモ

無名関数

無名関数

無名関数はクロージャとも呼ばれ、 関数名を指定せずに関数を作成できるようにするものです

変数を引数で渡す

function method() {
    $hello = 'hello';
    $closure = function($greeting) {
        echo $greeting." world", PHP_EOL;
    };
    $closure($hello);
}
method();

変数をuseを使って引き継ぐ(値渡し)

function method2() {
    $hello = 'hello';
    $closure = function() use ($hello){
        $hello = 'goodby';
        echo $hello." world",  PHP_EOL;
    };
    $closure();
    echo $hello;
}
method2();

変数をuseを使って引き継ぐ(参照渡し)

function method3() {
    $hello = 'hello';
    $closure = function() use (&$hello){
        $hello = 'goodby';
        echo $hello." world",  PHP_EOL;
    };
    $closure();
    echo $hello;
}
method3();

クロージャとは関数の中の関数である

function outer(){
    $x = 1;
    return function () use (&$x){ 
        echo $x,PHP_EOL;
          $x = $x + 1;
    };
}

$f =  outer(); 
$f();  
$f();  
$f();  

クロージャを使うと、このように「状態を保持する関数」を作ることができる

JavaScriptでは、あるスコープ内で指定された変数が見つからない時、自動的に外側のスコープへ探しに行きます。

function outer(){
    var x = 1;
    return function (){
      console.log(x);
        x = x + 1;
    };

}

var f =  outer(); 
f();  // 1
f();  // 2
f();  // 3

クロージャは何の役に立つのか?

$(function(){
  var isClicked = false;
  $('#form').submit(function(){
        if (isClicked) {
            alert('すでにクリック済みです。');
            return false;
        }
        isClicked = true;
    });

});

パーフェクトPHPのクロージャの説明が全然わからなかった - blog @kimromi
JavaScriptとPHPの無名関数内での変数の扱い - せかいろぐ
なぜクロージャ(Closure)と言うのか? - Qiita
私が今までクロージャを理解できなかった理由 - 主にプログラムを勉強するブログ
無名関数/クロージャー基礎
phpのクロージャ・無名関数の使いどころについて考えてみた - Qiita