При присвоении результата добавления переменной калькулятор не работает. Почему?

#javascript #html

#javascript #HTML

Вопрос:

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

Я попытался следовать вместе с видео, но я не хотел просто «копировать-вставлять» то, что он писал, поэтому я остановился и попытался сделать то, что я считал логическим кодом … НЕПРАВИЛЬНО!

Вот в чем проблема

Почему это не работает?

 function addNum() {
  let first = document.querySelector('.first').value;
  let second = document.querySelector('.second').value;
  let result = document.querySelector('.resultt').value;
  return result = first   second
}
  

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

Но когда я делаю это: (как это было сделано в учебнике)

 function addNum() {
  let first = parseInt(document.querySelector('.first').value);
  let second = parseInt(document.querySelector('.second').value);
  document.querySelector('.resultt').value=first   second;
}
  

Таким образом, он работает без присвоения результата переменной.

Почему?

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

1. JavaScript использует семантику передачи по значению . en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value

2. @FelixKling — Просто придирчивый к терминологии. 🙂 передача по значению и передача по ссылке не имеют ничего общего с присвоением переменной. Это термины искусства, связанные с передачей аргументов в функции.

3. @T.J.Crowder: Я бы предположил, что применяется то же самое поведение (вообще говоря, я знаю, что это происходит в JavaScript)? Т.е. Язык, который использует передачу по значению, также будет делать это для простых назначений переменных. Но, возможно, нет…

4. @FelixKling — Понятно. 🙂 Но это действительно разные вещи. Например, в C # a = b всегда просто копируется значение из b в a (где «значение» — это либо примитив, либо ссылка на объект), но если вы переходите b в функцию, это может быть по значению (по умолчанию) или по ссылке ( out ref параметр или). Но если они не добавили его недавно, в C # по-прежнему нет способа заставить a = b mean » a ссылаться на b (например amp; , IIRC на C — но прошло много лет с тех пор, как я делал C 🙂 ).

5. @T.J.Crowder: Спасибо 🙂

Ответ №1:

Когда вы делаете

 let result = document.querySelector('.resultt').value;
  

вы копируете значение из value свойства в result переменную. После этого между ними нет постоянной связи, каждый из них просто содержит одну и ту же строку. Это означает, что позже, когда вы это сделаете result = first second , все, что вы делаете, это обновление result ; это никак не влияет на value .

Поэтому вам нужно назначить обратно value , как вы делаете во втором блоке кода.

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

1. Правильно ли было бы сказать, что в этом случае не должно быть переменной, при вводе которой пользователь ничего не получает от пользователя, как при вводе результата?

2. @marcomarco — Это полностью вопрос стиля. Вероятно, это относится к той же категории, что и то, должна ли функция выполнять return a b; или const result = a b; return resu< большинство людей предпочитают первое, но последнее часто удобно для отладки (и они обрабатываются одинаково компилятором / движком JavaScript; в случае JavaScript, где размер исходного кода имеет значение, любой приличный минификатор справится с уменьшением этого).