이 글은 주로 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('hello word')", 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);