javascriptの無名関数、即時関数について

関数とは

関数とは|function|ファンクション - 意味/定義 : IT用語辞典

引数と呼ばれるデータを受け取り、定められた通りの処理を実行して結果を返す一連の命令群

javascriptの関数は以下のように書く

function 関数名(){
    //処理
}
function helloWorld( ){
    console.log("Hello World");
}

無名関数とは

名前の通り、関数名がない関数。 無名関数は以下のように書く

function(){
    //処理
}

引数に定義した関数を代入することも可能

var sum = function(x, y){
    return x + y;
}
console.log(sum(1, 1));

無名関数は、関数名をいちいち考えなくて済むというメリットがある。

即時関数とは

即時関数は関数を定義すると同時に実行するための構文。即時関数は以下のように書く

(function (){
    //処理
})();

無名関数と同様、引数に定義した関数を代入することも可能

var sum = (function (x, y){
    return x + y;
})(1, 1);

通常の関数は再利用を前提としているのに対して、即時関数は再利用を前提としていない。また、即時関数は関数を定義すると同時に実行されるため、初期化などに使うと有効

スクリプトに書く #! から始まる1行目(シバン)について

シバンとシェバング

シバン(Unix) - Wikipedia

シバンまたはシェバン (shebang) とはUNIXスクリプトの#!から始まる1行目のこと。起動してスクリプトを読み込むインタプリタを指定する。 hash-bangまたはshell-bang、sharp-bangとも言うが、これらを縮めたshebangという呼び方が一般的かつシンプルである。

シェバング - UNIXの部屋 コマンド検索: shebang

この「#!」のことを「シェバング」(shebang) と呼ぶ。また、この行全体を「シェバング行」と呼ぶこともある。

シェバングの役割

シェバング - UNIXの部屋 コマンド検索: shebang

コンピュータが直接解釈できるのはマシン語だけである。しかし UNIX では、ファイルの先頭 2バイトが「#!」であった場合は、その後に記述されている別のコマンドを実行しようとする。

使い方

Ruby/usr/bin/rubyにインストールされているなら、以下のように書いてhoge.rbとして保存すると、シェルから./hoge.rbのように実行できる

#! /usr/bin/ruby

シェバングはrubyコマンドを使ってスクリプトを実行するときも解釈される。これを利用してRubyスクリプトに毎回決まったコマンドライン引数で実行させることもできる。つまり以下のように書くと、毎回-Keオプションを指定して実行することになる。

#! /usr/bin/ruby -Ke

#! /usr/bin/rubyと書いた場合、環境が違うと実行できない。なぜなら、Ruby/usr/bin/rubyにあるとは限らない。Ruby/usr/local/bin/rubyにあることもある。そこで以下のようにenvが使われる。

#! /usr/bin/env ruby

しかし、#! /usr/bin/env rubyとした場合、インタプリンタにコマンドライン引数としてオプションを渡すことができない。なぜなら、シェバングに渡すことができるオプションは1つだけで、envにはrubyというオプションを渡しているかららしい。(自分の場合、毎回決まったコマンドライン引数で実行させることがほとんどないから気にする必要がなさそう)