我正在通过以下帖子了解js闭包:How do JavaScript closures work?。
我想体验所以我尝试通过创建一个在函数本身上使用回调的函数来创建一个循环,这样做我会增加一个参数并显示结果。
起初它并没有起作用我改变了我增加论点的方式并且它起作用了:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
if(fromString.equalsIgnoreCase("Activity2")){
this.finish();
Activity1.finish();
}else if(fromString.equalsIgnoreCase("Activity1"){
finish(); // close this activity and return to preview activity (if there is any)
}
}
return super.onOptionsItemSelected(item);
}
仅将 i ++更改为++ i 。
输出如下:
function test1(i1){
console.log("test1 : "+i1.toString());
setTimeout(function(){test1(i1++);},2500);
}
function test2(i2){
console.log("test2 : "+i2.toString());
setTimeout(function(){test2(++i2);},2500);
}
test1(0);
test2(0);
为什么第一步不起作用?
编辑2:我知道i +和++ i之间的差异,但不管怎么说它不起作用?
编辑:当然它与封闭有关...
答案 0 :(得分:3)
in
function test1(i1){
console.log("test1 : "+i1.toString());
setTimeout(function(){test1(i1++);},2500);
}
你总是用相同的i1值调用test1(),然后递增它。
因为你总是用值0来调用它,所以你得到0作为输出
test1(i1++)
相当于
test1(i1); // it is always getting called with value = 0
i1++; // later being incremented but not used
而在另一个函数中
function test2(i2){
console.log("test2 : "+i2.toString());
setTimeout(function(){test2(++i2);},2500);
}
等同于
i2 = i2 + 1;
test2(i2);