为什么console.log()仅在刷新时显示更新的Array?

时间:2018-03-27 02:37:49

标签: javascript arrays ecmascript-6

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;

}


function curveScore(original, curveAmount) {
  return original + curveAmount;
}

//Generate a random array
const testScores = Array.from({
  length: 20
}, () => getRandomIntInclusive(60, 100));
console.log(testScores);

// Updated testScores with curved scores
testScores.forEach((el, i, curvedScores) => {
  curvedScores[i] = curveScore(el, 10);
});
console.log(testScores);

所以,这里一切正常。基本上,生成一个随机的“测试分数”数组,记录这些分数,然后“弯曲”10分,然后再次记录。

有趣的是,我第一次在浏览器中打开它时,我没有得到正确的结果。相同的数组显示2x(未添加10个点)。

刷新浏览器后,我会得到正确的输出。

为什么呢?我想某种程度上console.log()forEach()完成之前发射了2倍?这是否需要Promise或其他东西来一致地显示正确的结果?

2 个答案:

答案 0 :(得分:0)

  

有趣的是,我第一次打开这个   浏览器,我没有得到正确的结果。显示相同的数组   2x(未添加10分)。

     

刷新浏览器后,我会得到正确的输出。

Chrome粗略地说是日志参考。

关闭控制台工具(无论第一次打开页面无关紧要 [1] ),chrome实际上并没有记录数组,它只是一些记录。当您打开开发工具时,它会两次打印当前版本的参考。

如果dev工具是打开的,另一方面,日志记录实际上发生在每次调用时,这就是你看到数组的两个版本的原因。

要解决此问题,只需实际打印数组的内容即可。例如,调用JSON.stringify



function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;

}


function curveScore(original, curveAmount) {
  return original + curveAmount;
}

//Generate a random array
const testScores = Array.from({
  length: 20
}, () => getRandomIntInclusive(60, 100));
console.log(JSON.stringify(testScores));

// Updated testScores with curved scores
testScores.forEach((el, i, curvedScores) => {
  curvedScores[i] = curveScore(el, 10);
});
console.log(JSON.stringify(testScores));




[1]:只需关闭开发工具,点击刷新并再次打开它,您将看到问题(同一阵列打印两次)仍然发生。

答案 1 :(得分:0)

有以下两种选择:

  1. 使用$(document).ready(function() { // you code here });

    JavaScript
  2. window.onload = function() { // Your code here }

    {{1}}