2011-11-18 5 views
1

그래서 문제는 setTimeout에 의해 호출되어야하는 함수 내에 함수가 있다는 것입니다. 그러나 setTimeout은 그것이 호출하는 함수가 루트를 'scope'로 가정하기 때문에 작동하지 않습니다.setTimeout 함수 내부에서 호출 함수 - 범위 문제

함수 범위를 변경하지 않고 어떻게 해결할 수 있을지 궁금하십니까?

편집 :

여기

가 무슨 뜻입니다 :

function general(){ 
    function saysomething(){ 
     console.log('hi there'); 
    } 
setTimeout("saysomething();", 1000); 
} 

가에서는 setTimeout 실패 ..

긍정적
+1

코드보기 :) –

+1

무엇? 예제 코드를 제공하거나 무엇을 요구하는지 명확히하십시오. – WTK

+0

setTimeout의 첫 번째 인수에는 문자열이 아닌 함수 객체를 지정해야합니다. – iankit

답변

5
function general(){ 
    function saysomething(){ 
     console.log('hi there'); 
    } 
    setTimeout(saysomething, 1000); 
} 
+1

이것이 작동하는 이유를 설명 할 수 있습니까? – Julian

+0

JavaScript 함수의 범위 체인은 함수가 정의 될 때 결정됩니다. 'general'의 본문 안에 콜백 함수를 정의함으로써 콜백 함수가'general' 내에 정의 된 다른 모든 변수, 즉'sayomething'을 참조 할 수 있도록합니다. – Ben

+1

즉, 벤은 클로저를 사용하여 sayomething 함수에 대한 참조를 저장합니다. – Bert

2

하지 않음이 당신이 무슨 뜻인지하지만 당신이 함수를 호출 할 때 변수를 전달할 수 있습니다 in the setTimeout

function f1(){ 
    var a='1'; 
    var b='b'; 
    setTimeout(function(){f2(a,b);},1000) 

} 

function f2(a,b){ 
     alert(a + b); 
} 

f1();