예전에는 타이머를 작성할 때 항상
setInterval("fn()",2000);
최근에 jquery를 사용하여 타이머를 작성할 때 항상 fn이 나타나는 문제가 발생했습니다. 존재하는 오류 메시지는 다음과 같습니다
$(function(){setInterval("fn()",2000);})
해결책은 따옴표와 대괄호를 제거하고 가장 독창적인 방법을 사용하는 것입니다
$(function(){setInterval(fn,2000);})
다른 방법은 다음과 같이 jq의 확장을 작성하는 것입니다
$(function(){
$.extend({
fn:function() {
alert("im fn!");
}
})
setInterval("$.fn()",2000)
위 내용은 모두 기재되어 있으니 문제 없습니다. 하지만 매개변수를 전달해야 한다면 어떻게 될까요?
위의 첫 번째 작성 방법처럼
$(function(){setInterval(fn,2000);})
$(function () {setInterval(fn(para),2000);})
에서 오류를 보고했습니다. 이것은 더 고전적이고 더 멍청합니다.
이때 함수를 빌드하여
$(function(){setInterval(function(){fn(para)},2000);})
이것도 가능합니다.
두 번째 방법을 전달하는 방법은 이것이 더 간단하므로 더 이상 말하지 않겠습니다.
블로그에 올리는 것은 메모리용으로만 사용하는 것은 기본입니다! 초보자들이 실수하기 쉬운 부분이기도 합니다!
//===========================
두 번째 유형을 추가하겠습니다. 매개변수 전달 방식.
코드를 먼저 보세요
$( function(){
$start = 1;
$.extend({
a:function(t){
$index = t;
alert($index ); $start ;
}
})
setInterval("$.a(" $start ")",2000)
어떤 사람들은 이렇게 글을 쓰려고 하는데, 결과는 어떻게 될까요? 결과는 항상 1이고 증가하지 않는 경고입니다. 여기서 주목해야 할 것은 setInterval의 첫 번째 매개변수입니다. 이는 큰따옴표로 묶인 명령문이며, 그 안의 내용은 변수로 해석됩니다. 위의 작성 방법을 따르면
setInterval("$.a(1)",2000)
과 같습니다. 그러면 결과가 이해됩니다. 올바른 작성 방법은 당연히
$start = 1;
$.extend({
a:function(t){
$index = t;
alert($index);
$start;
}
})
setInterval("$.a($start)",2000)
}); 이번에는 $start가 변수로 해석됩니다. 이 명령문은 function(){a(value)}가 아니라 function(){a(variable)}과 동일합니다.