javascript - 一个面试题,不明白这其中的过程
本文介绍了javascript - 一个面试题,不明白这其中的过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
直接上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<button>test</button>
<script>
var arr1 = new Array();
var arr2 = new Array();
arr1 = [1,2,3,4,5];
var button = document.getElementsByTagName('button')[0];
button.onclick = function(){
console.log(arr1);
arr2.push(arr1);
console.log(arr2);
console.log(arr2[0]);
arr1.pop();
console.log(arr1);
console.log(arr2[0]);
}
</script>
</body>
</html>
我测试的结果:
有2个不明白的地方:
1.箭头指的地方为什么没有显示出5?
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?
解决方案?
如果我只是想在操作arr1的时候,不影响arr2,有没有什么办法?
解决方案
console.log(arr1); //line 1
arr2.push(arr1); //line 2
console.log(arr2); //line 3
console.log(arr2[0]); //line 4
arr1.pop(); //line5
console.log(arr1); //line 6
console.log(arr2[0]); //line 7
回答
1.箭头指的地方为什么没有显示出5?
执行line 3的时候,控制台打出 [Array[5]] 是正确的,但是当你点击之前的小箭头展开[]中具体内容的时候,所有语句都执行完,arr1的最后一个元素被你pop()了所以此时只有4个items
2.从头到尾没有弹出arr2,为什么arr2会随着arr1的变化而变化?
因为arr2[0]内存指向的就是arr1,所以arr1变了,arr2[0]也会跟着变
解决方案?
使用克隆大法,把arr1克隆一份再赋值给arr2[0]
这篇关于javascript - 一个面试题,不明白这其中的过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文