2018/12/30 php,無名関数、クロージャー、など パート2

次にクロージャについて。

クロージャとは、関数Aの宣言内で、関数Aの返り値として無名関数Bを返す。

そして外側関数Aを実行した返り値(無名関数)を変数に代入する。つまりラムダ関数。

クロージャは、変数の値として使用することもできます。 PHP は、そのような記述があると自動的に内部クラスClosure のインスタンスに変換します。

http://php.net/manual/ja/functions.anonymous.php

具体例として

https://qiita.com/tricogimmick/items/3e344486658e3cfbd407


function create_counter()
{
    $count = 0;
    return function() use (&$count) {
        return ++$count;
    };
}

$counter = create_counter();
echo $counter

2018/12/30 php,無名関数、クロージャー、など パート1

無名関数・クロージャーについてまとめる。

記事内の青文字部分は根拠のはっきりしないブログ主の推測です。

青文字部分に限らず記事内の内容全てについて正確性を保証できません(笑)

「内容が違う」「このサイト、この本見ればわかるよ」みたいなのがあればお願いします。

まず無名関数、ラムダ関数について。


$message = ‘testestテスト’;

$example=function($para){
var_dump($para);
};
$example($message);   //testtestテスト

$message=’worldworldワールド’;

$example($message);  //”worldworldワールド”


↑これも無名関数というんだと思う。





次にuseを使って外のスコープの変数(グローバル変数)を引き継ぐ方法(値渡し)


$message = ‘testてすと&テスト’;
$example = function () use ($message) {
var_dump($message);
};
$example();  //string(25) “testてすと&テスト”

$message = ‘worldわーるど&ワールド’;
$example();  //string(25) …

8/24 関数 つづき javascript

関数 のつづき

入れ子の関数とクロージャ

の部分でまたクロージャ登場。

function outside(x) {
  function inside(y) {
    return x + y;
  }
  return inside;
}
fn_inside = outside(3); // このように考えてください : 与えられたものに 3 を加算する関数を代入します
result 

クロージャーについて javascript

クロージャについては最初、

https://asciidwango.github.io/js-primer/basic/function-scope/

に記述があり、それを見ていた。

静的スコープ

メモリ管理の仕組み

について説明しており、関係はあるのだと思うが、いまいち具体的にまとめられなかった。


次に見つけたのが

クロージャ

この記事にあるコードで説明がつきそう。

function makeFunc() {
  var name = "Mozilla";

  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();

myFunc();

関数makeFunc内で宣言された変数name。これはmakeFunc関数の呼び出しが終わったらガベージコレクションにより消えるんじゃないのか?という話。

しかし

var myFunc = makeFunc();

により変数myFuncには関数…