>웹 프론트엔드 >JS 튜토리얼 >setTimeout 및 setInterval_Basic 지식의 브라우저 호환성 분석

setTimeout 및 setInterval_Basic 지식의 브라우저 호환성 분석

WBOY
WBOY원래의
2016-05-16 19:18:271449검색

AJAXRequest의 브라우저 호환성을 실수로 테스트했을 때 IE에서 AJAXRequest.update 메서드에 일부 문제가 있는 것을 발견했습니다.
AJAXRequest.update 메소드를 호출할 때 문제가 발생합니다. 업데이트 간격과 업데이트 횟수가 제공되면 IE에서 문제가 발생합니다. 구체적인 표현은 업데이트 간격이 제공되면 기능이 작동한다는 것입니다. 업데이트 번호가 제공되면 해당 기능은 지정된 업데이트 횟수 이후 실행을 중지할 수 없습니다.
여러 가지 예를 테스트한 결과 IE에서는 setTimeout과 setInterval이 매개변수 전달을 지원하지 않는 문제를 발견했습니다.
데모 주소: http://www.xujiwei.cn/demo/usetimer/
Netscape의 JavaScript 참조에 있는 setTimeout 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

setTimeout
지정된 밀리초가 경과한 후 한 번 표현식을 평가하거나 함수를 호출합니다. >구문
setTimeout(expression, msec)
setTimeout(function, msec, arg1, ..., argN)
매개변수
expression JavaScript 표현식을 포함하는 문자열
msec 숫자 값. 또는 밀리초 단위의 숫자 문자열.
function 모든 함수.
arg1, ..., argN (선택 사항) 인수가 있는 경우

두 번째 방법입니다. 이를 사용하는 방법은 타이머를 정의하는 것입니다. 함수를 실행할 때 setTimeout을 호출할 때 정의된 매개변수를 함수에 전달합니다. 그러나 IE에서는 이 호출 방법이 지원되지 않습니다. 이 매개변수를 받지 않습니다. 예:

코드 복사 코드는 다음과 같습니다.


Firefox 및 Opera에서는 브라우저가 프롬프트 상자를 올바르게 팝업하여 "my site: www.xujiwei.cn"이라는 문자열을 표시할 수 있지만 IE에서는 표시되는 내용은 "my site: undefine"입니다. 이는 show 함수가 str 매개변수를 수신하지 않았으므로 정의되지 않은 변수로 표시된다는 의미입니다.
물론, 함수 내부에 사용된 변수가 전역 변수라면,




url 변수는 전역 변수이므로 타이머 실행으로 정의된 "show(url);" 명령문 세그먼트는 매개 변수를 올바르게 전달할 수 있습니다. 하지만 url이 전역 변수가 아닌 경우 로컬 변수인 경우 실행 결과가 틀립니다.



코드 복사
코드는 다음과 같습니다.



이 때 테스트 기능을 실행하면 URL이 정의되지 않았다는 메시지가 표시됩니다. 정의된 문장 세그먼트 "show(url);" 실행 시, function test에서 context가 분리되었고, function test 내부에 url이 정의되어 있으므로, function test 실행 시 url 변수가 해제되었습니다.
setTimeout에서 지역 변수를 사용하고 IE의 setTimeout이 매개변수 전달을 지원하지 않는 문제를 해결하려면 익명 함수를 사용할 수 있습니다. 즉, setTimeout 호출 시 익명 함수를 정의하고 내부에서 원래 요구 사항을 수행할 수 있습니다. 이 기능을 작동합니다.
코드 복사 코드는 다음과 같습니다.



위의 예에서는 setTimeout을 호출할 때 익명 함수가 정의되어 있으며 해당 함수 본문은 "show(url);"입니다. 타이머가 이 함수를 호출하면 일부 함수가 올바르게 실행될 수 있고 "my site: www.xujiwei.cn" 문자열이 표시되기 때문에 url 변수는 계속 참조됩니다.
일반적으로 setTimeout이나 setInterval을 사용할 때 다음 사항에 주의해야 합니다.
1. 타이머를 정의할 때 표현식을 사용하는 경우 그 안에 포함된 변수는 전역 변수이거나 직접 값이어야 합니다. 지역 변수가 될 수 없습니다.
2. 타이머를 정의할 때 호출 함수를 정의하는 경우 괄호를 추가하지 않고 함수 이름만 적어야 하며, 추가하면 반환 값을 정의하게 됩니다.
3. IE에서는 타이머를 사용할 때 매개변수를 전달할 수 없습니다.
4. IE에서 타이머를 사용할 때 매개변수를 전달하려면 익명 함수를 사용하고 함수 본문에서 원래 호출된 함수를 호출하면 됩니다.

오타가 있으면 정정해주세요.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:[JS] 프레임을 동적으로 추가하는 방법을 구현해보세요! Unfinished_javascript 팁다음 기사:[JS] 프레임을 동적으로 추가하는 방법을 구현해보세요! Unfinished_javascript 팁

관련 기사

더보기