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

Пример из популярного учебника по JS:
Например:

var i = 1;
var a = ++i; // (*)
alert(a); // 2


В строке (*) вызов ++i увеличит переменную, а затем вернёт ее значение в a. Так что в a попадёт значение i после увеличения.

Постфиксная форма i++ отличается от префиксной ++i тем, что возвращает старое значение, бывшее до увеличения.


1. Где грань между возвратом значения и присваиванием? Зачем нужно было создавать два этих термина returnи = ?
2. Если я правильно понимаю, то в сущности возврат значения есть присваивание его переменной, из которой оно взято?
3. Всегда ли возврат производится в переменную?
  • Вопрос задан
  • 509 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
в "i = 1" вы просто присваиваете значение переменной i.

в "a = i++" вы вызываете отдельную подпрограмму, которая найдет значение в переменной i, добавит к ней единицу, сохранит измененную i, которая теперь будет на единицу больше, а затем возвратит значение, и уже это возвращенное значнеие будет присвоено переменной а

Чувствуете разницу?
Ну и да, дочитайте учебник, вопрос же элементарные.
Ответ написан
1) Возврат значения не равно ≠ присваивание его переменной.
2) Возврат значения может быть без присваивания. Например при выводе в консоль выражение 1 + 1 вернет 2. Происходит возврат значения 2, но оно никуда не присваивается.
console.log(1 + 1);
И более сложный пример с функцией (до которых вы еще не дошли):
function add() { 
    return 1 + 1; 
}
console.log(add()); // 2

В этом примере функция возвращает значение 2, но оно ничему не присваивается.
И еще посложнее пример с массивом и методом shift:
var arr = [1, 2, 3];
console.log(arr); // [1, 2, 3]
console.log(arr.shift()); // 1
console.log(arr); // [2, 3]

Здесь метод shift удаляет первый элемент массива и возвращает его, но присваивания не происходит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
var a = 1;
var b = 1;
alert(++a); // 2
alert(b++); // 1


Выполните код, почувствуете разницу. А для чего это может понадобиться узнаешь потом.
Ответ написан
@nirvimel
Столкнувшись с подобными вопросами, создатели одного из языков программирования приняли решение вообще исключить из языка такое понятие, как присваивание значений переменным. Заодно ликвидировав как таковое понятие переменной.
Язык в результате стал чище и легче. А количество вопросов, возникающих при его изучении, заметно сократилось.
Ответ написан
lxsmkv
@lxsmkv
Test automation engineer
вот попробуйте, посмотрите как интерпретатор разводит код "по понятиям", т.е строит абстрактное синтаксическое дерево. Когда вы вставите вместо числового значения выражение инкремента он скажет что это UpdateExpression. Выражение обновления. Каждое выражение при выполении интерпретируется до получения его конечного значения.
Ответ написан
Комментировать
@nrv
1)Присваивание и возврат значения - разные вещи.
Присваивание - это присваивания переменной значения, возвращаемого выражениям справа от =.
Т. е., есть выражение, которое возвращает значение в результате вычисления этого самого выражения. Например, (a+b+c)/d.К сожалению, выражение может не только возвращать значение, но и изменять значение переменных, которые в нем участвуют. Как, например i++ и ++i. Но это плохой стиль кодирования (мое личное мнение). Return - это уже не тот возврат значения, о котором шла речь выше. Это оператор который указывает, какое значение будет результатом выполнения функции. Просто когда написано return 0; то это называют возвратом значения функции.
2) Хрень, читаем ответ на п. 1
3) Возврат значения выражением может производится в никуда. Например, просто написано i++. Но если этот пример имеет смысл, то, если просто написать a+b, то хоть так и можно, смысла никакого нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы