ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    JavaScriptのクロージャー

    このエントリーを含むはてなブックマーク はてなブックマーク - JavaScriptのクロージャー あとで読む
    JavaScriptのクロージャーについて、分かりやすい解説記事がありました。(メモ)

    [JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記

    今まで、JavaScriptについて、「何となく、分かりにくいなー?」と思っていた原因は、
    関数(メソッド)の書き方や扱い方が、PHPとはちょっと違う点でした。

    プロになるためのJavaScript入門 ~node.js、Backbone.js、HTML5、jQuery-Mobile (Software Design plus)
    河村 嘉之 / 川尻 剛
    技術評論社
    2012-12-07
    ¥ 3,218

    (p.6)

    1.2 JavaScriptの特徴
    1.2.3 関数が第1級オブジェクトであること
    変数への代入や参照など、通常操作が可能なオブジェクトを第1級オブジェクト(First-class object)と呼びます。
    JavaScriptの関数は第1級オブジェクトとなっていますので、通常のオブジェクトを同様に引数に指定でき、C言語の関数ポインタやRubyのブロックのように、処理を外部から挿入することができます。
    一般にこのような関数を高階関数(Higher-order function)と呼びます。

    関数は第1級オブジェクトなので、関数自体を返り値として指定することもできます。
    この場合、処理がスコープをまたぐことになりますが、生成されたスコープで変数を解決するものを静的なスコープ(Static scope)と呼びます。
    また、実行時のスコープを用いるものを動的なスコープ(Dynamic scope)と呼びます。

    一般にスコープは「変数が見える範囲」と定義されるので、前者(※静的なスコープ)ではスコープを環境(Environment)と呼び、ソースコード上の構造を表現する環境を特にレキシカル環境(Lexical Environment)と呼びます。
    また、レキシカル環境を参照する関数を特にクロージャと呼びます。

    実行時の参照が拘束されているという点で静的スコープは動的スコープよりも安全であり、近代的なプログラミング言語では大部分が前者を採用します。
    JavaScriptも同様で、クロージャの実現が可能です。
    また、クロージャはスコープに加えて時系列をまたぐこともでき、たとえばパラメータが確定する時点で生成しておいて、後で必要なときに実行するといった遅延評価も可能です。



    JavaScriptの入門書を見るときは、クロージャーの説明が、自分にとって分かりやすいか?どうかを基準にしていました。

    でも、結局、このサイトの説明が、JavaScriptのクロージャーの書き方について、一番分かりやすかったです。
    [JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記

    クロージャーの仕組み自体は、とてもシンプルに説明できます。
    データと処理 - 浜村拓夫の世界

    どんなに複雑なコンピューターのプログラムであってさえも、その構成要素は、
    ・データ
    ・処理

    というたった2つの要素に分解、還元できる。

    このことに気付くと、プログラミング技法の学習は、スッキリとした見通しのもとに進めることができる。

    ●処理の工夫
    データをうまく処理するための仕組み、仕掛けが今までいろいろと発案されてきた。

    関数、オブジェクト、クロージャ
    関数は処理です。入力と出力があります。
    オブジェクトは、データに処理がくっついたものです。
    クロージャは、処理にデータがくっついたものです。

    スコープはデータが保存されている場所です。
    スコープあたりの処理の数で、クロージャ、オブジェクト、関数を分類できます。

    クロージャ   1つのスコープ  1個の処理
    オブジェクト  1つのスコープ  複数の処理
    関数       スコープなし    1個の処理



    JavaScriptで、無名関数、クロージャーの書き方に慣れたら、処理を組み立てやすくなりますね?
    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/1177-753ff4ea

    FC2Ad