2012年6月10日日曜日

javascriptとfunction型 その1

FaceBookにも書きましたが、javascriptは「functionが第一級型」「すべてが連想配列」ということが腑に落ちるようになるとすごくおもしろくなります。 なので、今回は「functionが第一級型」についてちょっと解説。

第一級型ってなんぞやっていうのはWikipediaでも見てもらうとして、 要するに、functionもstringやboolと同じように、自由に変数・引数・戻り値として使えるということですね。

例えば、これはごく初歩的なfunctionの使い方

function sayHello(name) {
   return "Hello," + name + "!";
}

WScript.echo(sayHello("Tetsuya"));// => "Hello,Tetsuya!"

では、(あんまり意味ないけど)このsayHelloっていう関数を変数に代入してみます。

function sayHello(name) {
   return "Hello," + name + "!";
}

//WScript.echo(sayHello("Tetsuya"));// => "Hello,Tetsuya!"

var _say = sayHello; // _sayにsayHelloというfunctionを代入
WScript.echo(_say("Tetsuya")); // => "Hello,Tetsuya!"(上でコメントアウトした行とまったく同じ)

このようにfunction型も普通に変数に格納することが出来て、格納した変数に()をつけてあげることで呼び出すこともできます。

ちなみに、

function sayHello(name) {
   return "Hello," + name + "!";
}

WScript.echo(typeof(sayHello)); //=> "function"
WScript.echo(typeof(sayHello()));//=> "string"
このようにtypeofで型を調べると、
  • sayHello("()"を付けない)=>function型
  • sayHello()("()"を付ける)=>string型(関数が実行されてreturnで返した値が返る)
というのが分かりますね。


もちろん、上記の例はあんまり意味の無いコードなので、「だからどうした!?」って言いたい気持ちは分かります(笑)
でも、この特性をうまく使うと面白いことができるんです。続きは次回。

0 件のコメント:

コメントを投稿