专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

一道充满套路的javascript面试题,来看看吧!

ins518 2024-10-05 20:31:11 技术文章 9 ℃ 0 评论

接上一篇文章:如果能做对这道题,有没有资格去阿里呢?

我们来看下一道奇葩面试题:

写出下面程序的运行结果

function test(){
 var i=0;
 return function(n){
 n = (i++)+n+(++i);
 return ++i+n+(i++);
 }
}
 
test()(15);
console.log(test()(20));

考察知识点:函数闭包,i++和++i的区别

分析

1.套路一:用函数闭包的形式来迷惑别人

这里的test()函数和其返回的函数(这里将它命名为returnFn)构成了一个闭包,因为returnFn中读取了test中的变量 i。

但是,每一次执行test() 的时候,变量 i 都被重置为 0 。如果没有注意到这一点,很容易被迷惑,认为 test()(15);执行后改变了 i 的值。

2.套路二: i++ 和 ++i 中先加和后加的区别

下面这段代码:

 n = (i++)+n+(++i);
 return ++i+n+(i++);

可以等效于:

i += 1; // ++i 先加
n = i +n +i;
i += 1; // i++ 后加
i +=1;
return i+n +i;
i +=1;

所以,这道题的结果为:28

PS : 如果这票文章让你学到了一点知识,欢迎点赞并关注我哦,每天一点技术干货,让我陪你在大牛的路上越走越远!!!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表