写一个函数fnn(),使fnn(2,3)和fnn(2)(3)输出的结果都为5
这道题目其实非常简单,2和3只有在相加的情况下才等于5,所以,第一个fnn(2,3)要输出5,最简单的办法就是直接把两个参数在函数中相加即可
<script> function fnn(a,b){ return a+b } console.log(fnn()); </script>
但是第二个,fnn(2)(3)其实这里用到了闭包。
什么是闭包,这个我们在这里就不详细解释了,大家可以去网上查一下一些大神的博客和文章,他们写的东西比官方笼统的解释要详细的多。
简单的说一句就是函数a里面嵌套着函数b,而且函数b也能访问函数a里面的变量;
在这个题目上,fnn(2)(3),我们可以修改上面那个函数来实现等于5的结果
<script> function fnn(a,b){
//首先通过条件判断是否有2个参数,也就是形参b,如果有形参b,那么直接返回a+b,也就是第一种的fnn(2,3) if(b){ return a+b
//如果没有形参b,那么说明它只有一个参数 }else{
//首先先声明一个变量b,将形参a的值赋值给b。 var b=a;
//然后返回一个函数,这里是返回一整个匿名函数,这里面的参数a就是fnn(2)(3),第二个括号里面的参数3,在这里,函数会自执行,类似于自执行函数,最后返回的结果还是2+3 return function(a){ return b+a } } } console.log(fnn()()); </script>
这只是一道很基础的面试题,稍微了解闭包的人都能做出来,我发表这篇文章的目的并不是为了深入探讨闭包的原理和功能,只是为了给刚接触闭包的初学者们提供一个实例来帮助他们加深对闭包的理解。