Приоритеты в выражении запутали
Здравствуйте!Помогите понять, почему переменная c = 5?
Ведь сначала вычисляется выражение в скобках: (a = b), т.е. переменная a меняет свое значение на 10.А после происходит взятие остатка: 15 % 10 = 5.Только я вот чего не могу уяснить, почему переменная a в левой части выражении равняется 15, а не 10!?Значение переменной a должно было изменится, после операции в скобках или видимо тут используется старое значение переменной a.Подскажите пожалуйста в чем ошибка в моих рассуждениях!И как вычисляется по приоритетам данное выражение!Заранее спасибо! var a = 15, b = 10, c; c = a % (a = b); alert(c); // 5 |
AlexanderFilatov,
вот что у тебя происходит: var a = 15, b = 10, c; c = a /* "а" у тебя тут равно 15*/ % (a/* только тут у тебя "а" становится 10*/ = b); // итого 15 % 10 = 5 alert(c); // 5 |
Это я понял!Но ведь переменная a ссылается на одну область памяти и если у нее поменялось значение в одно месте, то и в другом должно поменяться!Почему так?
|
AlexanderFilatov,
Так первую "а" ты еще не успел поменять. Это в математика сначала скобки выполняются, а присваивание переменных это не математика. Все идет с лева на право, код у тебя читается так 15 % (10). |
Все сообразил!Я понял в чем ошибка моих размышлений!Я думал математически и забыл что интерпретатор вычисляет выражение слева направо!Большое спасибо за ответ!
|
Цитата:
А сначала он не считает, а производит лексический анализ написанного выражения, и только потом принимает решение о действиях. |
Цитата:
Получается он подставляет сначала значение 15, а затем значение 10 вычислив выражение (a = b) и присваивает той же переменной вот так: var a = 15, b = 10; a = a % (a = b); alert(a); // 5 Я правильно вас понял!? |
Цитата:
выражение 1(выражение 2(выражение 3)) то порядок выполнения всего выражения будет с 3 к 1, а никак ни слева направо. |
Цитата:
|
Цитата:
1.В "a" подставляется значение 15 2.Далее происходит вычисление выражения: (a = b), в переменную "a" получит значение переменной "b".(присвоение)То есть 10. 3. 15 % (10) 4.Результат 5 запишется снова в переменную "a". Я правильно понял суть? |
Часовой пояс GMT +3, время: 01:47. |