練炭ブログ

X680x0、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

Irvine/DMonkey: 即時関数パターン

2 個のコメント»

(function(){ ... })()の別の書き方いろいろ - 泥のように

こちらを見て、DMonkey でも JavaScript と同じように動作するのかを調査してみました。

  • Irvine 1.3.1.127 & DMScript 0.3.12
  • 「スクリプトを直接実行」から実行。
var a = "global";

(function(){
  var a = "another paren";
  alert(a); //"another paren"
}());
//OK

+function(){
  var a = "plus";
  alert(a); //plus
}();
// 関数は実行されるがその直後に ENameError(-1)

-function(){
  var a = "minus";
  alert(a); //minus
}();
// 関数は実行されるがその直後に ENameError(-1)

!function(){
  var a = "ex";
  alert(a); //ex
}();
// OK

void function(){
  var a = "void";
  alert(a); //void
}();
// OK

typeof function(){
  var a = "typeof";
  alert(a); //typeof
}();
// OK

new function(){
  var a = "new";
  alert(a); //new
};
// NG

+ 演算子、- 演算子がエラーになります。

上のサンプルコードでは関数が値を返していないので undefined として評価されますが、DMonkey では undefined に対する算術演算がエラーになるためです(JavaScript では +undefined や -undefined が NaN という演算結果になります)。

以下のように、有効な値を返せば動作します。

+function(){
  var a = "plus";
  return a;
}();
// OK

-function(){
  var a = "minus";
  return a;
}();
// OK

new を使う方法は動作しません。new 自体の仕様が JavaScript と違うようです。

次に、そのまま書くパターン。

var b = [ function(){ alert("array"); }() ];
// OK

var b = function(){ alert("bare"); }();
// OK

問題なく動作します。

代入の場合。

res = (function(){return "1";})(); //string の "1"(元のまま)
res = +function(){return "1";}(); //number の 1
res = -function(){return "1";}(); //number の -1
res = !function(){return "1";}(); //false
res = void function(){return "1";}(); //null

どれも値を返しているので動作します。

なお、void にキャストした結果が JavaScript では undefined ですが、DMonkey では null になります(ちなみに typeof null は "object" ではなく "null")。

ネタ

コメントなし»

暇人\(^o^)/速報 : 「変われるよ、現に俺は変われた」あの名言を生み出した大人気カルト漫画の最終話がうpされたぞ! - ライブドアブログ
この年末一番注目されていた漫画の完結編がついに登場。

@nifty:デイリーポータルZ:食べ放題の極意

漫画などで何度も使われてきた厨二な台詞1000 : デジタルニューススレッド

もしドラ作者「本は購入した人の所有物ではない」 ブラよろ作者「破かれようと口出しする権利はない」 | ニュース2ちゃんねる

俺の嫁がこんなに腐れアマなわけがあった:キニ速  気になる速報

萌え壁紙 新着情報

コメントなし»

「HYPER BRAND」 石原ますみさん
31日まで全脱衣ブロック崩しゲームを無敵化、31日までの期間限定で「ハイプリースト」を追加。
クリアすると壁紙を貰える。

se・きらら
2011クリスマス壁紙

天狐OFFICIAL WEB SITE.
『英雄*戦姫』Twitter 壁紙
https://twitter.com/#!/tenco_cc/status/150884392007516160

アリスソフト 公式サイト
ブログの2011年12月24日に『大帝国』壁紙
基本的に1週間のみの配布

みなとそふと
スタッフ日記の2011年12月23日に『真剣で私に恋しなさい!S』PS Vita 用壁紙