2017-07-06 127 views
0

我试图调用另一个函数内部进行的setTimeout()的函数,我不断收到此错误:如何调用函数的函数内部进行的setTimeout

hi is not defined

这是代码。

hello("hi"); 
function hello(a) 
{ 
    hi(a); 
    function hi(b) 
    { 
     console.log(b); 
     c = setTimeout('hi("' + b + '")', 50) 
    } 
} 

其中一个"hi"正在被记录,但它只是停止。我认为问题出在这个部分:c = setTimeout('hi("' + b + '")', 50)

有没有修改函数结构内部函数的修改?

+0

在定义之前,您正在调用'hi'。 (编辑:不...) – evolutionxbox

+0

@evolutionxbox这就是所谓的提升:) –

+0

之前或之后调用定义嗨给了我相同的结果,所以我没有打扰。类似于重复,但setTimeout具有子功能而不是父功能。尽管谢谢你。 –

回答

2

您可以传递参数作为setTimeout的第三个参数。

hello("hi"); 
 
function hello(a) 
 
{ 
 
    hi(a); 
 
    function hi(b) 
 
    { 
 
     console.log(b); 
 
     c = setTimeout(hi, 50,b) 
 
    } 
 
}

+0

完美运作。谢谢。 –

+0

没有让我接受答案,那么快=) –

0

c = setTimeout(() => hi(b), 50)应该工作。

编辑(感谢在评论@evolutionxbox)

c = setTimeout(hi, 50, b)看起来甚至更好。

你收到此错误:

hi is not defined

4行:hi(a)

执行甚至没有能够进入超时部分。超时本身不会产生错误,但也不会做任何事情,因为'hi("' + b + '")'是一个字符串,而不是函数。

+0

你也可以传递参数而不用定义另一个函数... https://developer.mozilla.org/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout – evolutionxbox

+0

你的意思是'setTimeout (hi(b),50)'?但是我相信你遇到了一个上下文问题。如果你想保持相同的上下文,你必须做'setTimeout(hi.call(this,b),50)' –

+0

我不认为我是这个意思。我的意思是'setTimeout(hi,50,b)' – evolutionxbox