無名関数
無名関数
無名関数はクロージャとも呼ばれ、 関数名を指定せずに関数を作成できるようにするものです
変数を引数で渡す
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