Javascript闭包和范围之谜
Javascript closure and scope riddle
我听到了这个问题,我不确定如何解决它。
要求是:实现函数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;
}
}
但是当我第一次运行它时,它会增加值,所以这是不行的。
var x = from(3);
function from(startValue) {
var counter = startValue;
return function() {
return counter++;
}
}
console.log(x()); //outputs 3
console.log(x()); //outputs 4
最直接的解决方案是简单地从counter
中减去1
:
function from(val) {
var counter = val - 1;
return function(){
return counter += 1;
}
}
但是,在这种情况下,您可以使用后缀++
运算符,因为在 counter++
中,counter
的值增加 1,但返回旧的 counter
值。
你应该很高兴
function from(val) {
var counter = val;
return function(){
return counter++;
}
}
为了完整起见,等效于counter += 1
将是 ++counter
。
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
试试这个
相关文章:
- 如何将闭包内的值返回到外部范围
- 如何测试只在闭包范围中可见的javascript方法
- 闭包和CoffeeScript's范围界定
- 我从闭包返回的函数在外部范围内是否可用
- 为什么允许通过原型继承访问另一个闭包范围内的私有变量
- 在闭包中自动绑定范围变量
- Javascript闭包是否总是保留范围变量?
- JSONP 回调和闭包/范围
- JavaScript:闭包是否可以通过值访问封闭范围中的变量,而不是像PHP中那样通过引用访问
- 我可以'我没有针对我的闭包中的正确范围
- Javascript 闭包范围
- Javascript 闭包 - 全局范围内被覆盖函数的行为
- 了解闭包和范围
- javaScript 中的词法范围/闭包
- 我可以在匿名范围内更改Javascript闭包中引用的函数吗?
- 带有匿名函数的变量和闭包范围
- (javascript)闭包关闭的封闭范围超过多少
- Javascript闭包及其范围
- for循环中的Ajax不会返回数组位置的正确值,尽管闭包绑定了当前值位置的范围
- JavaScript闭包和范围的问题