Javascript闭包和范围之谜

时间:2015-06-14 18:35:11

标签: javascript

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

要求是:实现函数from,因此它将在以下场景中执行:

var x = from(3);
console.log(x()); //outputs 3
console.log(x()); //outputs 4
//TODO: implement from()

我尝试过类似的事情:

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

但是我第一次运行它时会增加值,所以不行。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

最直接的解决方案是从1中简单地减去counter

function from(val) {
    var counter = val - 1;
    return function(){
        return counter += 1;
    }
}

但是,在这种情况下,您可以使用postfix ++运算符,因为在counter++中,counter的值增加1,但 old < / strong>返回counter的值

你应该很高兴
function from(val) {
    var counter = val;
    return function(){
        return counter++;
    }
}

为完整起见,相当于counter += 1的内容为++counter

答案 2 :(得分:0)

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

var x = from(3);
alert(x()); //outputs 3
alert(x()); //outputs 4
alert(x()); //outputs 5
alert(x()); //outputs 6
alert(x()); //outputs 7
alert(x()); //outputs 8

试试这个