Solving the puzzle

Yesterday in my class I got this puzzle :

Name everything wrong with this javascript code, then tell how you would re-write it.

function makeFun() {
f = {};
for( var i=0 ; i<3 : i++ ) {
f[i] = function() { alert("sum='+i+f.length); }
}
return f;
}

Expected Results:
makeFun()0 should alert “sum=0”
makeFun()1 should alert “sum=2”
makeFun()2 should alert “sum=4”

I solved it like this :

function makeFun() {
	var i,
		f = {};
	for (i = 0; i < 3; i++) {
		f[i] = (function(number) {
			return function() {
				alert("sum=" + (number * 2));
			}
		}(i));
	}
	return f;
}

Today I got another assignment and I’m unable to solve it, here it is :

Name everything wrong with this javascript code, then tell how you would re-write it.

function makeFun(fInput) {
f = fInput || {};
// append three functions
for( var i=0 ; i<3 : i++ ) {
f[i] = function() { alert("sum='+i+f.length); }
}
return f;
}

// Sample Expected Results (do not change)

myvar = makeFun();
myvar0; // should alert “sum=0”
myvar1; // should alert “sum=2”
makeFun([‘a’])2; // should alert “sum=5”