среда, 5 сентября 2018 г.

Stacktrace function - Custom stack trace in JavaScript



function stacktrace () {
        var stacktraceData = getStacktraceData(arguments.callee.caller);
    function getStacktraceData (functionThatCalledThisStacktraceFunction) {
        if (functionThatCalledThisStacktraceFunction) {
            return (
                   getStacktraceData(functionThatCalledThisStacktraceFunction.caller)
                + functionThatCalledThisStacktraceFunction.toString().split('(')[0].substring(9) // Function name
                + '('
                + Array.prototype.slice.call(functionThatCalledThisStacktraceFunction.arguments).join(', ') // Function arguments
                + ')'
                + '\n'
            );
        } else {
            return '';
        }
    }
    return stacktraceData;
}

main();

function main () {
    var x = execute();
    var y = add(2, 3);
}

function execute () {
    calc();
}

function calc () {
    return add(8, 11) + add(9, 14);
}

function add (x, y) {
    console.log(stacktrace());
    return x + y;
}