微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在javascript中调用提升函数时的奇怪效果

如何解决在javascript中调用提升函数时的奇怪效果

我是 JavaScript 的新手。我在 JS 中学习了提升行为,并通过一个简单的程序示例自行测试。

我的程序生成一个包含随机数的数组,然后调用 unique() 删除数组中的所有重复元素:

const NUMBERS = [34,25,45,11,36,98,58,97,56]
const ARRAY_LENGTH = 4;
  
function getRandomNumberList () {
  let res = []
  for (i = 0; i < ARRAY_LENGTH; i++) {
    res.push(NUMBERS[Math.floor(Math.random() * ARRAY_LENGTH)])
  }
  return res
}


// Generate array with random numbers 
let randomArray = getRandomNumberList() 

// When we compute this,First call doesn't Work
// the console.log return [ 34,34,34 ]
console.log(randomArray)

// First call with Hoisting
// Because of console log,return [ 34,25 ] instead of [ 34,45 ]
unique(randomArray)    

// This function remove duplicates entries if exist.  
function unique (arr) {
   let uniqueArray = [...new Set(arr)]  
   return uniqueArray 
};

// Second call without hoisting. This seems to work all the time
// return [ 34,45 ]
unique(randomArray)

然而,我遇到了一个奇怪的行为。

当我调用 console.log above一个调用时,第一个调用不起作用。但是,如果我删除了 console.log(),它似乎可以工作。

谁能解释一下为什么会发生这种行为?

请注意我使用 Runjs 暂存器来运行我的程序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。