2016-12-31 74 views
0

我试图做一个函数REPEAT,而不是。这是我的代码:嵌套函数重复

function REPETER(nb) { 
return { 
    INSTRUCTIONS: function(callback) { 
     for(i_repeter=1;i_repeter<=nb;i_repeter++) callback(); 
     return this ; 
    } 
}; 
} 
var x = 1 ; 
REPETER(5) 
.INSTRUCTIONS (() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 

它运作良好。

但是:

REPETER(2) 
.INSTRUCTIONS(() => { 
xxx = xxx + 1 ; 
REPETER(5) 
.INSTRUCTIONS(() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 
} 
); 

不工作,第一REPETER什么都不做。

我该如何解决这个问题?

谢谢!

回答

0

您需要在INSTRUCTIONS函数内声明i_repeter。因为你没有声明它,所以你正在创建一个隐含的全球。全球化是一件不好的事情,隐含的事情是双重的。既然你有一个中继器调用中继器,你最终会产生串扰;第一个认为它是在它之前完成的。

所以:

function REPETER(nb) { 
    return { 
    INSTRUCTIONS: function(callback) { 
     var i_repeter;     // <=== Change is here 
     for (i_repeter = 1; i_repeter <= nb; i_repeter++) callback(); 
     return this; 
    } 
    }; 
} 

也不要尝试在功能更新xxx使用i_repeter(并且一定要声明xxx)。

+1

谢谢,我认为这是变量i_repeter的问题,但我确实不知道它到底是什么。 该指令警报(i_repeter)是一个尝试,看看问题出在哪里,这是不是在我的代码,我道歉。 – rognntudjuu