javascript - 一个面试题,不明白这其中的过程

查看:88
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆