functionが第一級型だということは、functionの引数にfunctionを渡すことも出来ます。
例えば,
function sayHello(name,_after) { WScript.echo("Hello," + name + "!"); //_afterに渡されたfunctionを呼ぶ //ただ、_afterがあるかどうかもそれがfunctionかも分からないので //一応条件分岐 if(_after && typeof(_after) == "function"){ _after(name); //ここではnameで渡された値をそのままスルー } } //単にnameを元にechoするだけのfunction function sayPleaseWelcome(name) { WScript.echo("Please welcome " + name + "!"); } //こちらは_afterを指定してないので、単にsayHelloを実行 sayHello("Tetsuya"); //=>"Hello,Tetsuya!" //_afterにsayPleaseWelcomeを指定しているので、 //sayHelloが呼ばれた後にsayPleaseWelcomeが呼ばれる sayHello("Tetsuya",sayPleaseWelcome); //=> "Hello,Tetsuya!" => "Please welcome Tetsuya!"のようにcallbackイベントを作るときなんかに使います。
この例ではsayHelloに渡されたnameをそのまま_afterに渡していますが、例えば最初のfunctionでなんらかの処理をした結果を_afterの引数として渡してあげるともっと使い勝手が良いです。
めんどくさいのでコードは書きませんが、ajaxなんかの非同期処理がバンバン出てくるときに使うと便利ですね。
ここでは、上のコードをもうちょっといじって遊んでみます。
例えば、私、Tetsuyaが嫌われている場合のソースコード。
他の人は歓迎しますが、Tetsuyaだけは嫌いなので出て行って欲しいのです。。。
でも、大人としてちゃんと挨拶だけはしてくれます。
//最初の挨拶 function sayHello(name,_after) { WScript.echo("Hello," + name + "!"); if(_after && typeof(_after) == "function"){ _after(name); } } //歓迎すべき人への対応 function sayPleaseWelcome(name) { WScript.echo("Please welcome " + name + "!"); } //好ましく無い人への対応 function sayGetOut(name) { WScript.echo("Get out of here," + name + "!"); } //最初の挨拶はするけど、その後の対応は人による function userComing(name){ if(name == "Tetsuya"){ //Tetsuyaだけは出て行って欲しい sayHello(name,sayGetOut); }else{ //他の人は歓迎 sayHello(name,sayPleaseWelcome); } } //Tetsuyaが来た場合 userComing("Tetsuya");// => 「出て行け」ってゆわれる(涙) //Taroが来た場合 userComing("Taro");// => 歓迎される(^ o ^)
0 件のコメント:
コメントを投稿