Skip to content

值和引用的终极面试题

Code

ts
// 下面的代码输出什么(字节)?
var foo = { bar: 1 };
var arr1 = [1, 2, foo];
var arr2 = arr1.slice(1);
arr2[0]++;
arr2[1].bar++;
foo.bar++;
arr1[2].bar++;
console.log(arr1[1] === arr2[0]);
console.log(arr1[2] === arr2[1]);
console.log(foo.bar);

解析

ts
// 下面的代码输出什么(字节)?
var foo = { bar: 1 };
var arr1 = [1, 2, foo]; // arr1 = [1, 2, {bar: 1}]
var arr2 = arr1.slice(1); // arr2 = [2, {bar: 1}]
arr2[0]++; // arr2 = [3, {bar: 1}]
arr2[1].bar++; // arr2 = [3, {bar: 2}]; arr1 = [1, 2, {bar: 2}]
foo.bar++; // arr1 = [1, 2, { bar: 3 }]; arr2 = [3, {bar: 3}]
arr1[2].bar++; // arr1 = [1, 2, {bar: 4}]; arr2 = [3, {bar: 4}]
console.log(arr1[1] === arr2[0]); // false
console.log(arr1[2] === arr2[1]); // true
console.log(foo.bar); // 4