Today I had to modify a piece of JavaScript code. The code used return a single string, and I needed to modify it to return an array of objects. Using C#, it would have been easy, change the return type, hit the compile button, fix the errors, rinse & repeat until it compiles.

In JavaScript code, however, it was much more complex, I had to find all the places where that method was called, and that particular parameter would pass unchanged throughout several functions before it was used, so I had to track that down. Pretty annoying.

And since I know that I’ll get questions on that, here is the actual example:

getDocument: function (id, operation, successCallback) { $.ajax({ url: settings.server + 'docs/' + id, dataType: 'json' , complete: function (xhr) { switch (xhr.status) { case 200: var data = JSON.parse(xhr.responseText); var etag = xhr.getResponseHeader( "Etag" ); var template = xhr.getResponseHeader( 'Raven-' + operation + '-Template' ); successCallback(data, etag, template); break ; case 404: successCallback( null , null , null ); break ; } } }); },

I needed to change the template variable from to a dictionary of headers, since it needed to be processed elsewhere.

As for where it was actually used, here is one such example, which shows several layer of indirection (because of continuations):