Странный эффект при вызове функции подъема в javascript

#javascript #hoisting

#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, 45, 34, 34 ]
console.log(randomArray)

// First call with Hoisting
// Because of console log, return [ 34, 45, 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 выше первого вызова. Однако, если я удалю console.log() , это, похоже, работает.

Может кто-нибудь, пожалуйста, объяснить мне, почему произошло такое поведение?

Обратите внимание, что я использовал RunJS scratchpad для запуска своей программы.

Комментарии:

1. Пожалуйста, разместите свой код здесь в виде текста, а не изображений.

2. Не уверен, почему вы удаляете фрагмент, который я добавил к вашему вопросу, используя ваш код, чтобы фактически запустить его здесь. Если вы хотите, пожалуйста, добавьте это самостоятельно, чтобы другим было проще отвечать примерами (подсказка, нажмите CTRL-M при редактировании

3. Почему это [ 11, 34, 45 ] неправильно?

4. Я считаю, что это ошибка с блокнотом RunJS, но я не могу быть уверен. Этот код отлично работает в Node.js , но не работает, когда я использую его в repl.it . Если вы назначаете результат unique(randomArray) , он работает нормально.