ject. Does not use eval.
     * @param {string} str
     * @return {function}
     *
     * Example:
     *  var f = function (x, y) { return x * y; };
     *  var g = parseFunction(f.toString());
     *  g(33, 3); //=> 99
     */
    function parseFunction(str) {
        if (!str) return void (0);

        var fn_body_idx = str.indexOf('{'),
            fn_body = str.substring(fn_body_idx + 1, str.lastIndexOf('}')),
            fn_declare = str.substring(0, fn_body_idx),
            fn_params = fn_declare.