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行目(シバン)について
シバンとシェバング
シバンまたはシェバン (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というオプションを渡しているかららしい。(自分の場合、毎回決まったコマンドライン引数で実行させることがほとんどないから気にする必要がなさそう)