之前在做蚁群算法研究时遇到數据爆炸,想打印查看js数据极限点于是设置迭代次数为5,预期是每次迭代就打印一次信息数矩阵5次迭代打印5组不同的二维数组,好来查看每次循环中信息素的变化情况但是console.log出来的所有数据是一样的,点击右上角的感叹号出现Value below was evaluated just now。与预期不符
(说明:开始猜想for循环打茚的东西都一样,是不是闭包问题试着往闭包方向去解决,采用let定义都无效。结果证明此问题不是闭包问题是console.log取值问题)
然后我模擬该算法,采用一套简单逻辑分析其原因代码如下,设置循环次数(蚂蚁迭代次数为5次)查看每次迭代信息数的变化情况。预期情况吔是每次迭代就打印一次数组5次迭代有5组不同结果:
出现的结果却是与预期相符的,每次循环迭代出现结果不同
但是当我点开数组后發现:又出现了Value below was evaluated just now。没展开的值如黄色框内是不同的,展开后如红色框内的值全是一样的。究其原因可以发现其实是在Chrome Console.log()点击展开数组時,会重新去读一遍内存真实的值然后显示所以展开后都是最终值。
因此在打印二维数组时,其实如若不展开他显示的就是当前值,但是点击展开后会重新去内存读值,所以展开的值全是最终值,所以看到所有二维数组打印的都是一个值的情况
但是如果不展开,又看不到值所以本文介绍以下几种解决方案:
可以得到想要的结果,篇幅问题就不截图了
//返回传递给他的任意对象的类
可以看到,這样打印出来的就是每次都不一样了