Simply logging JavaScript calls.

Published:

When debugging complicated JavaScript one thing I find myself constantly doing is using console.log() to print out what functions are being called in what order. JavaScript is single-threaded and event driven so it's often not entirely clear what functions will be called in what order.

Traditionally I've done something like this:

function foo(bar) {
  console.log('foo('+bar+')');
}
but last night I came up with something better. It's probably not completely portable but it seems to work fine in recent Chrome / Safari / Firefox, which is really all I'm going to be using for debugging anyway:
function logCall() {
  console.log(logCall.caller.name + '(' +
    Array.prototype.slice.call(logCall.caller.arguments)
    .map(JSON.stringify).join(', ') + 
    ')');
}
Just add logCall() to the start of functions and the function call (including serialized arguments) will be logged to the console. Easy and foolproof.