I don’t understand why this doesn’t work:
function returnVerse(x){ return function(x) {console.log(x);}; } for(var x = 9; x>=0; x--){ return returnVerse(x)(); }
I just get undefined as a result.
I’ve been inspiring myself from this: JavaScript closure inside loops – simple practical example
I understand that this is a scope issue, so I’m trying to create a closure, what am I not getting here?
Thanks in advance!
Answer
The last function you’re returning is the last one you’re calling, and it’s called with just ()
, meaning no arguments, yet you’ve specified an argument in the inner function, and it’s undefined
.
function returnVerse(x){ // ^ outer argument return function(x) { // ^ inner argument overwrites outer argument console.log(x); // undefined }; } for(var x = 9; x>=0; x--){ return returnVerse(x)(); // ↑ ^ innner argument not passed, "undefined" outer argument }
Just don’t specify an argument in the inner function, and the argument from the outer function will be in scope, and enclosed (closure)
function returnVerse(x){ return function() {console.log(x);}; } for(var x=9; x>=0; x--){ returnVerse(x)(); }
Also, returning from the for
loop makes little sense, and means it only runs once