VueBloghyhero6

关于 引用类型和函数执行过程的小面试题目。

2019-10-18 / 2019-10-18 / 351次浏览

今天心情极其糟糕,那么下面来更新3个小的面试题目。

question one:

var a = [1,2,3]
var b = a
b.push(4)
console.log(a) // ????

question two:
function test(x) {
x.push(4)
x = [5,6,7]
x.push(7)
}
var a = [1,2,3]
test(a)
console.log(a) // ?????

question three:

function test(x) {
x.push(4)
x.length = 0
x.push(7)
}
var a = [1,2,3]
test(a)
console.log(a) // ?????

不吹不黑,如果你只是写业务还真不见得三道都能答对,相对的,这个题目不会也不能说明你不会写业务。反正面试官总觉得你是应该会的,尤其在这个称之为寒冬季的大时代里面。

首先第一题,我也不打草稿了,咱就吹水一波。

哎,这里还得在复习一波基本类型,Undefined,Number,String,Boolean,NULL 这个基本类型,

剩下 Object 和 function (函数是特殊的对象,上上片博客有提到。)

object Array Date RexExp 都是引用类型。

我的博客 函数与对象的关系,有提到

或者 去看下面博客,网上一搜一兜子的。
https://segmentfault.com/a/1190000006752076

回到我们第一题

答案:[1,2,3,4]
b 引用了 a, 栈 地址 不一样,但是 栈 的地址存储都是一样的,也就是 堆,b.push 直接改变了我们 堆里面的数据,所以肯定是变更了。

这也是我们进行深拷贝 浅拷贝的原因。 (小声哔哔:不会深浅拷贝,也不代表你不会写业务,说白了还是面试,面试。)

深浅 拷贝我的博客也有,还有一个饿了吗小姐姐的博客。

好的,那么我们回到第二题。

第二题 答案 是 [ 1,2,3,4 ],只是在第一步 执行了 x.push(4),

x = [5,6,7] 这一步是在赋值, 但是函数在运行进程中直接就销毁了。
所以再赋值 和 push 操作 完全失去作用。

在看第三题

答案 是 [7] 函数执行 修改了 a 没啥好说的了。

最后放上网上看到的一句话吧。如果 三年经验的前端,在LeetCode (一个刷题网站)的题目 通过率没有达到60% ,那么 这个饭碗端着很危险。

报警啦-。-