JS에서는 종종 다른 기능이 함수로 호출되는 상황을 만나게됩니다. 현재 fn ()과 같은 호출 메소드가 있고 다른 하나는 return fn ()와 같은 호출 메소드입니다. 일부 초보자는 종종이 두 가지 방법에 의해 혼란스러워집니다. 여기서 우리는 우아한 인터뷰 질문을 사용하여 두 방법의 차이점을 분석합니다.
var i = 0; 함수 fn () {i ++; if (i <10) {fn (); } else {return i; }} var result = fn (); console.log (결과);이것은 숨겨진 함정과의 인터뷰 질문입니다. 매우 간단 해 보입니다. 대부분의 사람들은 생각없이 10 대답 할 수 있습니다. 실제로, 인쇄 된 내용은 정의되지 않았다는 것을 알 수 있습니다. 이 트랩 질문은 위에서 언급 한 문제를 직관적으로 반영합니다. FN을 실행하는 선을 다음과 같이 수정할 때 :
var i = 0; 함수 fn () {i ++; if (i <10) {return fn (); } else {return i; }} var result = fn (); console.log (결과);현재 인쇄 된 결과는 10임을 알 수 있습니다.
여기에 반환을 추가하거나 추가하지 않는 사이에 왜 큰 차이가 있습니까?
여기서 주된 이유는 매우 간단합니다. JavaScript 함수에는 기본 반환 값이 있습니다. 함수가 마지막에 반환을 쓰지 않으면 기본적으로 정의되지 않은 것이 반환됩니다. 이것이 Chrome 콘솔에서 코드를 작성할 때 정의되지 않은 줄이 종종 아래에 나타납니다.
이 예를 자세히 살펴 보겠습니다. 내가 9로 증가 할 때, FN이 두 번째 시간 동안 재귀 적으로 불리는 것은 두 번째입니다. 반품이없는 경우, 이번에 FN이 실행 된 후에는 기본적으로 정의되지 않으면 다음 재귀는 계속되지 않습니다. 반환이 추가되면 마지막 재귀는 여기서 계속됩니다.
이것에 대해 말하면, 우리는 유명한 바이너리 검색 방법 인보다 고전적인 예를 확장 할 수 있습니다.
var mid = math.floor ((Ar 반환 검색 (n, mid); } else if (n <arr [mid]) {mid = math.floor ((Mid -1) / 2); 반환 검색 (n, mid); } else {리턴 중간; }} var index = search (n, mid); console.log (index);이진 검색 방법에는 여러 번 재귀 호출이 필요합니다. 많은 초보자들은이 알고리즘을 처음으로 구현할 때 종종 실수를합니다. 재귀 함수 전에 리턴을 추가하는 것을 잊어 버리는 것은 결국 반환 결과가 정의되지 않은 것으로 나타납니다. 여기서 이유는 이전과 비슷합니다. 반환을 추가하지 않으면 재귀 직후에 정의되지 않은 반환을 유발하며 다음 재귀를 계속하지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.