Javascript: в то время как цикл для решения проблемы экспоненты получает ошибку, когда мощность равна 0

Я написал код javascript для решения следующей проблемы >>>

Напишите функцию возведения в степень, которая принимает два аргумента:

  • основание (число)
  • мощность (количество)

Функция возведения в степень должна возвращать результат возведения основания в степень. Предположим, что аргумент степени всегда будет целым числом, большим или равным нулю. Не забывайте, что любое число, возведенное в 0-ю степень, равно 1!

function exponentiate (base, power) {

  if (power === 0){
    return result = 1
  }

  // while loop 
  let count = 0
  let result = 1;

  while (count < power){  

    result *= base
    count += 1
  }

  return result 
}


exponentiate(3, 0)

Но я получаю следующую ошибку: ReferenceError: результат не определен

Что не так с моим кодом?


person PineNuts0    schedule 22.03.2019    source источник
comment
Это задание? Я часто вижу это же упражнение на repl.it: repl.it/@brynnact33/, repl.it /@Alicia33/Мастерская циклов и отладки, ...   -  person Seblor    schedule 22.03.2019
comment
изменить return result = 1 на return 1;   -  person Nick Parsons    schedule 22.03.2019
comment
var exponentiate = Math.pow; Думаю, это обман.   -  person James    schedule 22.03.2019
comment
@James, серьезно, если это не задание, не изобретайте велосипед   -  person infamoustrey    schedule 22.03.2019


Ответы (1)


  1. Вы получаете доступ к result до того, как он определен. поэтому вы должны переместить их в верхнюю часть функции
  2. Здесь вы должны вернуть значение напрямую вместо присваивания

    if (power === 0){ return result = 1 }

function exponentiate (base, power) {
  let count = 0
  let result = 1;
  if (power === 0){
    return 1
  }

  // while loop 
  while (count < power){  

    result *= base
    count += 1
  }
  return result 
}

console.log(exponentiate(3, 0))

Проще всего использовать ** экспонентный оператор< /сильный>

const exp = (b,e)=>{
  return b**e
}

console.log(exp(3,0))
console.log(exp(3,1))
console.log(exp(2,10))

person Code Maniac    schedule 22.03.2019
comment
Ваш пункт № 2 на самом деле не является проблемой: return result = 1 все равно вернет 1 (конечно, присвоение значения переменной, которая никогда не будет использоваться, не является хорошей практикой). - person Gerardo Furtado; 22.03.2019
comment
@GerardoFurtado да, вот почему я написал это, вы должны сделать это так, а также в исходном коде OP результат был определен позже, чем он используется. - person Code Maniac; 22.03.2019