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