一个优雅的访谈问题分析JS中FN()和返回FN()的区别

一个优雅的访谈问题分析JS中FN()和返回FN()的区别
在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(指数);

两种查找方法也需要多次递归调用,很多错误在第一次实现时,这种新算法往往会使忘记添加递归函数返回,最后返回的结果是未定义的,这里类似前面,而且没有返回,会导致递归。返回未定义的,不会继续到下一个递归。
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部