在js中,
经常遇到调用
函数中其他函数的
情况。这时,将有FN()调用。还有另一种调用返回FN()的
方法。有些初学者经常被这两种方式混淆,这里有一个优雅的面试问题来分析这两种方法的不同之处。
var I=0;
函数FN(){
++;
如果(i < 10){
(FN);
其他{ }
还我;
}
}
var结果= FN();
console.log(结果);
这是一次采访,它隐藏了这个坑,看起来很简单,大多数人可能想不想回答10,实际上,它是知道未定义的被
打印出来的:
var I=0;
函数FN(){
++;
如果(i < 10){
返回FN();
其他{ }
还我;
}
}
var结果= FN();
console.log(结果);
此时,将打印出来的结果最终交付货物为10。
为什么这和这里的回报有很大的不同
最主要的
原因很简单,javascript的函数是
默认的返回值,如果不是函数的结尾会返回未定义的写返回,默认,这就是为什么Chrome
控制台控制台,为什么写代码经常出现在一行未定义的情况下。
仔细看看这个例子。当我被增加到9时,这就是第二次递归调用FN的时间。如果没有返回,FN此时将返回未定义的返回值,而不是继续下一个递归。当返回时,将出现最后一个递归,也就是说,当i = 10时,跳转到其他的,返回到
正确的10。
在这种情况下,一个更经典的例子,著名的两点查找法,可以
扩展。
VaR中= math.floor((arr.length - 1)/ 2);
函数
搜索(n,中){
如果(n>ARR {中}){
中= math.floor((中+ arr.length) / 2);
返回搜索(n,中);
如果别人}(n<ARR {中}){
中= math.floor((中1)/ 2);
返回搜索(n,中);
{人}
回中;
}
}
var索引=搜索(n,中);
console.log(指数);
两种查找方法也需要多次递归调用,很多
错误在第一次实现时,这种新算法往往会使忘记添加递归函数返回,最后返回的结果是未定义的,这里类似前面,而且没有返回,会导致递归。返回未定义的,不会继续到下一个递归。
以上是本文的全部内容,希望能对您有所帮助,希望大家多多
支持。