Pot.hasReturn

{Boolean} Pot.hasReturn ({Function|String} func)

Pot.js と PotLite.js で利用可能。

関数 func が return 文を持っているかチェックします。

引数の関数 func が return 文を持ち、実行すると最終的に return されて返るかどうか調べます。
func が文字列で与えられると、それをコードみなしチェックします。
この関数は、たんに return があるかどうか調べるわけではなく、
JavaScript として解析したうえで、関数の最初のブロック直下で return により返されるかをチェックします。
関数 func を実行するわけでありません。
任意のユーザー定義関数が return されるものかどうか調べたいときなどに便利になります。

func が return されるなら true を返し、そうでない場合 false を返します。

var func = function() {
  return 'hoge';
};
debug(hasReturn(func)); // true
var func = function() {
  var hoge = 1;
};
debug(hasReturn(func)); // false
var func = function return_test(return1, return$2) {
  // dummy comment: return 'hoge';
  var $return = 'return(1)' ? (function(a) {
    if (a) {
      return true;
    }
    return false;
  })(/return true/) : "return false";
};
debug(hasReturn(func)); // false
var func = function() {
  if (1) {
    return (function() {
      return 'hoge';
    })();
  }
};
debug(hasReturn(func)); // true
// E4X が利用できる環境での例
var func = function() {
  // return 'hoge';
  var e1 = <>return</>;
  var e2 = <><![CDATA[
    return 1;
  ]]></>;
  var e3 = <> <div data={(function() {
    return 'hoge';
  })()}>
    return 1;
  </div></>;
  var e4 = <><!--</>-->return 1;</>;
  var re = /<><!--[\/]--><\/>/gim;
  var e5 = <root><hoge fuga={(function() {
    return 1;
  })()} piyo="<root>">
  <root>return</root>return;<!--</root>"<root>"-->return;
  <!--return-->
  </hoge></root>;
  var root = "</root>";
  var r = 'return(1)' ? (function(a) {
    if (a) {
      return true;
    }
    return false;
  })(/return true/) : "return false";
};
debug(hasReturn(func)); // false