2013-05-04 1 views
0

이 코드를 감안할 때? 재귀 호출을 작성하지 않는 이유는 무엇입니까?왜이 코드는 재귀를 발생시키지 않습니까? 정확히 어떻게 무엇을</p> <pre><code>function foo() { if (!foo) { //blah blah blah some code here foo = true; } } </code></pre> <p>:

+5

function-object는 * 호출/호출/적용 *해야합니다. 예 : '()'- 재귀가 발생합니다. JavaScript의 함수는 단지 객체라는 것을 기억하십시오. 'foo()'는 foo를 평가 한 다음 함수 연산자 ("foo"를 호출)를 적용하는 반면, 'foo'라는 표현식은 단순히 값 (여기서는 함수 객체)으로 평가됩니다. – user2246674

답변

3

이것은 재귀를 만들 수 있습니다 :이

function foo() 
{ 
    if (!foo()) // <=== notice the() 
    { 
    //blah blah blah some code here 
    foo = true; 
    } 
} 

하지만를 괄호없이, foo이 실행되지 않습니다. 테스트에서는 변수 foo이 true로 평가되지 않고 부울 true으로 바뀝니다. 이상한 코드이지만 재귀는 아닙니다. 단지 변수로 있는지 확인,

function foo() { 
    if (!foo) 
    { 
    //blah blah blah some code here 
    foo = true; 
    } 
}  
var f = foo; 
foo = 0; 
f(); // this would result in foo being true 
+0

옙, 나의 대답에서 내가 생각하고 있었던 좋은 예다. –

+0

어떤 제정신 코더도 이런 종류의 코드를 쓰지 않기 때문에 즉시 시작하는 것은 쉽지 않습니다 ... –

+0

저는 8 년 동안 JavaScript로 테스트 자동화 코딩을 해왔고, 오늘은 첫 번째입니다 나는이 구조를 본적이 있으며, 그것은 내 마음을 괴롭혔다. –

0

그 자체를 호출하지 : 코드는 다음과 같이 될 수 있기 foo이 기능이라고 우리가 함수 내에서, 확실하지

주, 그 이름은 진실입니다. 함수의 이름을 변경할 수 있으며 foo는 호출 될 때까지 완전히 다른 것을 참조 할 수 있습니다.

그래서 명확하게하기 위해, 재귀 함수는 자신을 호출 할 때 발생

function foo(){ 

    foo(); 

} 

반면 당신이 그냥 전화를 시도하지 않고 foo는의 현재 값을 찾고 일을하고 있습니다.

!foo //if foo is defined as a function or other truthy object, is true 
관련 문제

 관련 문제