#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)
, он работает нормально.