2013-01-12 52 views
-1

正如話題:JavaScript函數調用對方

function a() 
{ 
    b(); 
} 
function b() 
{ 
    a(); 
} 

我試過,但沒有更迭:

function b(){} 

function a() 
{ 
    b(); 
} 
function b() 
{ 
    a(); 
} 

任何幫助表示讚賞]。

+3

這就像一個堆棧溢出在JavaScript一個簡單的定義:) – keune

+0

沒有什麼錯的第一段代碼,比其他這是一個無限的遞歸循環,會導致堆棧溢出異常。 – Pointy

+2

你想完成什麼? –

回答

1

既然你說的這個問題是關於你是否是能夠調用函數在聲明之前出現的代碼中:答案是。在JavaScript中,變量和函數聲明總是被提升到其封閉範圍的頂部。在功能的情況下,雙方的聲明和定義中升起,所以:

console.log(a); // undefined 
console.log(b); // ReferenceError - there is no var b 
console.log(f()); // 20; 
var a = 10; 
console.log(a); // 10 
function f() { return 20; } 
0

這是一個無盡的遞歸循環。不好:

function a() 
{ 
    b(); 
} 
function b() 
{ 
    a(); 
}; 

a(); 

那裏。玩得開心崩潰瀏覽器。

+2

之間有很多代碼,我只是簡化了它。 – ravik1222

0

簡化很好調試,但讓我們把它有用和安全(基於Sam3k的迴應):

function a(i) { 
    if (i < 10) 
    { 
    console.log('Running "a" iteration['+i+']'); 
    b(i); 
    } 
} 

function b(i) 
{  
    i++; 
    console.log('Running "b" iteration['+i+']'); 
    a(i); 
}; 

a(1); 
+0

謝謝,我不知道我怎麼能不這樣做第一次; / – ravik1222