Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript闭包和范围之谜_Javascript - Fatal编程技术网

Javascript闭包和范围之谜

Javascript闭包和范围之谜,javascript,Javascript,我听过这个问题,我不知道如何解决它 要求是:从实现功能,以便在以下场景中执行类似的功能: 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; } }

我听过这个问题,我不知道如何解决它

要求是:从实现功能,以便在以下场景中执行类似的功能:

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;
  }
}

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

最简单的解决方案是从计数器中减去1:

但是,在这种情况下,您可以使用postfix++运算符,因为在counter++中,counter的值增加了1,但返回了counter的旧值。 你应该很乐意和我一起去

function from(val) {
    var counter = val;
    return function(){
        return counter++;
    }
}
为了完整性起见,计数器+=1的等价物是++计数器。

函数fromval{ var计数器=val; 返回函数{ 返回计数器++; } } var x=from 3; alertx//产出3 alertx//产出4 alertx//产出5 alertx//产出6 alertx//产出7
alertx//输出8您是否尝试过实现它?那么,您的实现出了什么问题?您自己尝试过了吗?Post increment会起作用,而不是返回计数器+=1返回计数器++,这样计数器首先返回,然后递增。
function from(val) {
    var counter = val;
    return function(){
        return counter++;
    }
}
var x = from(3);

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

console.log(x()); //outputs 3
console.log(x()); //outputs 4