タグ

closureに関するbillie175のブックマーク (3)

  • 私が今までクロージャを理解できなかった理由 - プログラミングを勉強するブログ

    Javascriptを勉強する上で誰もがつまずくと言われるクロージャですが私も例に漏れず理解できないでいました。 さまざまな解説サイトを読んだりサンプルコードを書き換えてみたりして 静的なスコープの言語で利用できる。 関数が終了したあともそのローカル変数が参照できる。 といったクロージャの「仕組み」や「特徴」については分かったものの、もっとも重要ともいえる 「どういう時にクロージャを使えばいいのか」 が分かりませんでした。言いかえると友人がなんて言って悩んでいる時に 「そう言う時はクロージャを使うといいよ」 と言ってあげればいいのか。 例えばプログラムの勉強を始めた友人が 「これと同じ処理もう何回も書いてるんだよ。コピペばっかりしてる気がする」 と言って悩んでいたら 「そこを関数にすればいいんじゃない?」 って教えてあげますよね。 これと同じように友人が 「○○○○○○なんだよ、うまい方法

    私が今までクロージャを理解できなかった理由 - プログラミングを勉強するブログ
  • クロージャでuse演算子を使用すると、どのような仕組みで「変数を親のスコープから引き継ぐ」のでしょうか?

    クロージャは、変数を親のスコープから引き継ぐことができます。 引き継ぐ変数は、use で渡さなければなりません。 $message = 'hello'; // $message を引き継ぎます $example = function () use ($message) { var_dump($message); }; $example(); どのような仕組み? ・引数として渡すわけではない? ・引数とは何が違うのでしょうか? 「use ($message)」と書いた時点で「親スコープから変数を引き継ぐ」? ・引数として渡さずとも、スコープ間で値渡しや、参照渡しが出来るということでしょうか? ・意味合い的には引数と同じ? エイリアスを作成する use 演算子との違い ・同じ意味? ・エイリアスを作成するから、結果的に「親スコープから変数を引き継ぐ」ということ????

    クロージャでuse演算子を使用すると、どのような仕組みで「変数を親のスコープから引き継ぐ」のでしょうか?
  • クロージャ - JavaScript | MDN

    function init() { var name = "Mozilla"; // name は、init が作成するローカル変数 function displayName() { // displayName() は内部に閉じた関数 console.log(name); // 親関数で宣言された変数を使用 } displayName(); } init(); init() 関数はローカル変数 name を作成し、それから関数 displayName() を定義しています。displayName() は init() の中で定義されている内部関数で、その関数体の内部でしか利用できません。displayName() 自体はローカル変数を持っていませんが、外側の関数で宣言された変数にアクセスできるので、displayName() では親関数 init() で宣言された変数 name を使用

    クロージャ - JavaScript | MDN
  • 1