2017-07-06 143 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