>  기사  >  웹 프론트엔드  >  js 재귀 및 타이머 분석 예

js 재귀 및 타이머 분석 예

高洛峰
高洛峰원래의
2017-02-08 15:22:071640검색

이 글은 주로 js 재귀와 타이머 관련 지식을 소개합니다. 매우 좋은 참조 값을 가지고 있습니다.

재귀: 함수가 자신을 호출할 때 형성됩니다. all 예:

Function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
}

이것은 고전적인 재귀 계승 함수이지만 js에서 호출할 때 일부 오류가 발생할 수 있습니다. 예를 들어 다음 코드는

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial)// 出错

위 코드는 먼저 팩토리얼() 함수를 anotherFactory 변수에 저장한 다음 팩토리얼 변수를 null로 설정합니다. 결과적으로 참조는 하나만 있습니다. 원래 기능으로. 하지만 다음에 anotherFactioral()을 호출하면 계승 함수를 실행해야 하고, Factoial은 더 이상 함수가 아니기 때문에 오류가 발생합니다. 이 경우에는 Arguments.callee를 사용하면 이 문제를 해결할 수 있습니다.

arguments.callee는 실행 중인 함수에 대한 포인터이므로 함수에 대한 재귀 호출을 구현하는 데 사용할 수 있습니다.

예:

function factorial (num){
 if(num){
 return 1;
 }else{
 return num*arguments.callee;
 }
}

arguments.callee 장점:

1. 함수를 어떻게 호출하든 문제가 발생하지 않음을 보장할 수 있습니다. 따라서 재귀 함수를 작성할 때 함수 이름을 사용하는 것보다args.callee를 사용하는 것이 항상 더 안전합니다. 오류가 보고됩니다

엄격 모드로 작성:

var factorial = (function f(){
 if(num<1){
 return 1;
 }else{
 return num*f(num-1);
 }
})
2. 다음과 조합하여 사용합니다. 타이머:

JS는 단일 스레드 언어이지만 시간 초과 호출 및 간격을 설정하여 특정 순간에 예약 코드가 실행되도록 허용합니다. 전자는 지정된 시간 후에 코드를 실행하는 반면, 후자는 지정된 시간마다 코드를 실행합니다.

매개변수: 실행될 코드 및 시간(밀리초)

//不建议传字符串,传递字符串可能导致性能损失 
setTimeout("alter(&#39;hello word&#39;)", 1000);
//推荐方式
setTimeout(function(){
 alter("Hello world");
},1000)
setInterval(function(){
 alter("Hello world");
},1000)

참고: End

timeout으로 호출된 코드는 전역 범위에서 실행되므로 함수의 this 값은 엄격하지 않은 모드에서는 창 개체를 가리키고 엄격 모드에서는 정의되지 않습니다. 실제 응용 프로그램에서:

간헐적 호출을 시뮬레이션하기 위해 시간 초과 호출을 사용하는 것이 가장 좋은 모드입니다. 개발 환경에서는 후자의 간헐적 호출이 이전 간헐적 호출 사이에 시작될 수 있으므로 실제 간헐적 호출은 거의 사용되지 않습니다. .

var num = 0, max = 0;
function incrrmentNumber{
 num++;
 if(num < max){
 setTimeout(incrrmentNumber,500);
 }else{
 alert("Done");
 }
}
setTimeout(incrrmentNumber,500);

위와 같이 timeout 호출을 사용하면 이를 방지할 수 있습니다. 그러니 간헐적인 호출을 사용하지 마세요.

더 많은 js 재귀 및 타이머 인스턴스 분석 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.