Javascript闭包和范围之谜

use*_*863 0 javascript

我听到了这个问题,我不确定如何解决它.

要求是:实现该功能from,以便在以下场景中进行预处理:

var x = from(3);
console.log(x()); //outputs 3
console.log(x()); //outputs 4
//TODO: implement from()
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西:

function from(val) {
  var counter = val;
  return function(){
    return counter+=1;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是第一次运行它时,它会增加值,所以这是不行的.

bja*_*sic 5

var x = from(3);

function from(startValue) {
   var counter = startValue;
   return function() {
     return counter++;
   }
}

console.log(x()); //outputs 3
console.log(x()); //outputs 4
Run Code Online (Sandbox Code Playgroud)