Here's an example of a situation where a simple JS loop does not behave as expected, because of the loop variable not being in a separate scope.
The solution often presented is to construct an unpleasant-looking bit of loop code that looks like this:
for (var i in obj) {
    (function() {
        ... obj[i] ... 
        // this new shadowed i here is now no longer getting changed by for loop
    })(i);
}
My question is, could this be improved upon? Could I use this:
Object.prototype.each = function (f) {
    for (var i in this) {
        f(i,this[i]);
    }
};
// leading to this somewhat more straightforward invocation
obj.each(
    function(i,v) {
        ... v ...
        // alternatively, v is identical to
        ... obj[i] ...
    }
);
when I ascertain that I need a "scoped loop"? It is somewhat cleaner looking and should have similar performance to the regular for-loop (since it uses it the same way).
Update: It seems that doing things with Object.prototype is a huge no-no because it breaks pretty much everything. 
Here is a less intrusive implementation:
function each (obj,f) {
    for (var i in obj) {
        f(i,obj[i]);
    }
}
The invocation changes very slightly to
each(obj,
    function(i,v) {
        ... v ...
    }
);
So I guess I've answered my own question, if jQuery does it this way, can't really go wrong. Any issues I've overlooked though would warrant an answer.
 
     
     
    