2015-01-07 2 views
0

다음과 비슷한 코드가 있습니다.return 함수 내의 setInterval이 작동하지 않습니다.

function test(){ 
    return function(){ 
     setInterval(//Another Function Reference // ,1000); 
    } 
} 

나는 test()()를 호출하고있다.

위의 코드는 작동하지 않습니다. 누군가 제발 이유를 설명해 주시겠습니까?

+3

무엇을 기대합니까? – neelsg

+3

여기에 폐쇄가 없습니다. – KooiInc

+1

수정 전의 코드 *가 제대로 작동하는 것처럼 보입니다. 편집 후 * 코드는 그 주석이 포함 된 실제 코드가 아니므로 실제 * 코드의 문제점을 어떻게 추측 할 수 있습니까? 자리 표시 자 주석없이 해당 행을 표시하십시오. 브라우저의 개발 콘솔에 오류가 있습니까? – nnnnnn

답변

0
그것은 당신이 호출해야합니다 ... 그래서 당신은 함수를 반환하는 나를 위해 노력하고 있습니다

: 나는 당신이 그렇게 자기의 호출 기능을 할 test()를 원하는 것으로 가정

http://jsfiddle.net/97hzj2je/

function test(){ 
    return function(){ 
     setInterval(function(){ 
     alert("Hello"); 
     },1000); 
    } 
} 

test()(); 

http://jsfiddle.net/LL24g8z2/

var test = (function(){ 
    return function(){ 
     setInterval(function(){ 
     alert("Hello"); 
     },1000); 
    } 
})(); 

test(); 
: 리턴 기능을 할 수 있도록하는 대신 한 번 설정 0
+0

왜 downvote? –

0
function test(){ 
    return function(){ 
     setInterval(function(){ 
     alert("Hello"); 
     },1000); 
    } 
} 

var hello = test(); 
hello(); 
0

잘 작동하는 것 같습니다. test()으로 전화를 걸면 함수가 반환되지만 실행하지 않은 것입니다. 실행하려면 결과 함수를 호출해야합니다. 다음 중 한 가지 방법으로이 작업을 수행 할 수 있습니다

test()(); 

또는를 : 코드 1에는 폐쇄가 없습니다

var myFunction = test(); 
myFunction(); 
2

. test은 함수 객체를 반환하지만 [함수]는 실행되지 않습니다. 스 니펫에서 내부 함수에는 3 개의 클로저가 사용되고 반환 된 함수 객체는 변수에 할당되고 실행됩니다. 함수 오브젝트를 리턴 할 때의 이점은이를 다른 값에 지정하여 별도로 실행할 수 있다는 것입니다. 질문의

1 이전 버전

// startInterval: interval 1 second, message: 'Hello' (default) 
 
var startInterval = test(null, 1000); 
 
// anotherInterval: interval 5 seconds, message: ''Hello to you too'' 
 
var anotherInterval = test('<i>Hello to you too</i>', 5000); 
 

 
// execute the function objects 
 
startInterval();    
 
anotherInterval(); 
 

 
// [hithere], [time] and [result] are closed over 
 
function test(hithere, time){ 
 
    hithere = hithere || 'Hello'; 
 
    time = time || 1000; 
 
    var result = document.querySelector('#result'); 
 
    return function(){ 
 
     setInterval(function(){ 
 
     result.innerHTML += hithere+'<br>'; 
 
     },time || 1000); 
 
    } 
 
}
<div id="result">Greetings!<hr></div>

0

bind 상황에 당신의 내면의 기능을 '폐쇄를 작동하지 않는'언급 한 문제가있을 때 설정하는 것이 인터벌이 마침내 실행되고있는 것은 글로벌 범위에 있고 당신이 그것을 호출 한 곳이 아닙니다. 다음과 같이 수정할 수 있습니다.

function test(){ 
    return function(){ 
     setInterval(/*Another Function Reference */ ,1000); 
    }.bind(this) 
} 
+0

이것은 작동하지 않습니다 :'setInterval()'의 반환 값에'.bind()'를 호출하려고합니다. 이것은 id가 아닌 함수입니다. – nnnnnn

0

감사합니다. 나는 내 실수를 이해했다. 포인터 대신 함수 자체를 전달하고있었습니다.

관련 문제