Какова разница между этими двумя блоком if-else и блоком условного оператора? - PullRequest
0 голосов
/ 29 марта 2020

Я думаю, что эти два блока имеют одинаковое значение, но второй код не работает, хотя первый работает.

Второй выглядит не так круто, но я думаю, что его легче понять, чем первый. one.

Первый из них является частью очень простого практического кода React здесь (https://en.reactjs.org/docs/lifting-state-up.html), и я немного изменил его.

//1st
  const celsius = scale === 'f' ? tryConvert(temperature, toCelsius) : temperature;
  const fahrenheit = scale === 'c' ? tryConvert(temperature, toFahrenheit) : temperature;

//2nd  
  if(scale === 'f') {
    const celsius = tryConvert(temperature, toCelsius);
    const fahrenheit = temperature
  } else if (scale === 'c') {
    const celsius = temperature;
    const fahrenheit = tryConvert(temperature, toFahrenheit);
  } else {
    const celsius = temperature;
    const fahrenheit = temperature;
  }

При запуске моего кода React, включая вторые коды, на консоли появляется сообщение об ошибке «Цельсия не определена».

Во втором коде я думаю, что «градус Цельсия» должен быть определен независимо от «масштаба», потому что в последнем блоке есть оператор else.

В чем разница между этими двумя кодами ?

Извините за мой плохой английский sh .. Спасибо за чтение моего вопроса!

Ответы [ 2 ]

1 голос
/ 29 марта 2020

твой код работает. проблема в том, что const (а также let) - это так называемые "область видимости блока" . Таким образом, если вы определяете их внутри if / for /, а они определены только внутри этого блока.

0 голосов
/ 29 марта 2020

Я думаю, проблема не в этом коде. Возможно, вы обращаетесь к переменной / константе Цельсия. Объявите переменную вне блока if-else-if следующим образом

 let celsius = temperature
 let fahrenheit = temperature
 if(scale === 'f') {
    celsius = tryConvert(temperature, toCelsius);
 }
 if (scale === 'c') {
    fahrenheit = tryConvert(temperature, toFahrenheit);
 } 

Таким образом, вам не нужен третий блок. Если вы не любите использовать условный оператор и хотите улучшить его, попробуйте это.

 let celsius = temperature
 let fahrenheit = temperature
 if(scale === 'f') celsius = tryConvert(temperature, toCelsius);
 if (scale === 'c')  fahrenheit = tryConvert(temperature, toFahrenheit);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...