The following script produces "Hello", "undefined", "Hello" message boxes:
function action(callback) {
  window.setTimeout(callback, 1000);
}
var obj = { 
  text: "Hello", 
  f: function() { window.alert(this.text); } 
};
obj.f(); // Line 1
action(obj.f); // Line 2
action(function() { obj.f(); }); // Line 3
I looking for explanation why the line marked as "Line 2" produces "undefined" output.