Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   А это вообще как?! (https://javascript.ru/forum/misc/83401-ehto-voobshhe-kak.html)

jaroslav.tavgen 29.11.2021 05:27

А это вообще как?!
 
Извините за неинформативное название темы, но я реально ничего не понимаю.

function m(d, n, c1){
  return Math.floor(n * с1 - 0.1 * d);
}
function s(d, n, c1, t){
  let m1 = m(d, n, c1);
  return -20000*m1 + m1*t;
}
alert(s(1, 0, 0,  4));

Результат выполнения (точнее НЕвыполнения) этого кода: ошибка VM1695:2 Uncaught ReferenceError: с1 is not defined
at m (<anonymous>:2:25)
at s (<anonymous>:5:12)
at <anonymous>:1:7

(браузер Edge).

Цэ шо вообще деется?

jaroslav.tavgen 29.11.2021 05:29

Как это часто бывает, решение нашлось через секунду после опубликования поста:)

Дело в названии переменной. Видимо переменная c1 уже где-то используется (может быть в jquery, может быть ещё где). Если переименовать её, баг исчезает.

Правда, это всё равно очень странно. Даже если изменить переменную c1 на arg_c, баг всё равно остаётся. А если на preved - исчезает:) Мистика.

Aetae 29.11.2021 06:09

Ставлю палку колбасы что у тебя была в одном месте русская с. И когда периименовывал переменную ты её не удалял а дописывал.)

Белый шум 29.11.2021 08:48

Код:

$ echo 'function m(d, n, c1){
  return Math.floor(n * с1 - 0.1 * d);' |iconv -fcp1251 -tutf8
function m(d, n, c1){
  return Math.floor(n * СЃ1 - 0.1 * d);

И палка уходит к Aetae %)

jaroslav.tavgen 29.11.2021 17:20

Цитата:

Сообщение от Aetae (Сообщение 541961)
Ставлю палку колбасы что у тебя была в одном месте русская с. И когда периименовывал переменную ты её не удалял а дописывал.)

Похоже на то! И чего Джаваскрипт нормальные сообщения об ошибках не сделает? "Нот дефайнд", блин. Если он кириллицу без кавычек не читает, почему так и не сказать?

Aetae 29.11.2021 17:24

jaroslav.tavgen, в том то и дело что читает. У тебя задана переменная английская, а использована переменная русская. Это две разных переменных. Потому и та что использована - "Нот дефайнд".

WebStorm подсвечивает если используется разные языки, для eslint вроде тоже есть правило, чтоб находил такие опечатки.
Ну и если ты будешь использовать нормальные, говорящие, имена переменных, вместо однобуквеного мусора, то шансы на такое нарваться заметно снижаются.

voraa 29.11.2021 17:30

Цитата:

Сообщение от jaroslav.tavgen
Если он кириллицу без кавычек не читает, почему так и не сказать?

А что он должен говорить

let это = 1, такие=2, переменные=3;
console.log(это + такие + переменные)

jaroslav.tavgen 29.11.2021 18:15

Цитата:

Сообщение от Aetae (Сообщение 541961)
Ставлю палку колбасы что у тебя была в одном месте русская с. И когда периименовывал переменную ты её не удалял а дописывал.)

Цитата:

Сообщение от Aetae (Сообщение 541973)
jaroslav.tavgen, в том то и дело что читает. У тебя задана переменная английская, а использована переменная русская. Это две разных переменных. Потому и та что использована - "Нот дефайнд".

WebStorm подсвечивает если используется разные языки, для eslint вроде тоже есть правило, чтоб находил такие опечатки.
Ну и если ты будешь использовать нормальные, говорящие, имена переменных, вместо однобуквеного мусора, то шансы на такое нарваться заметно снижаются.

Понял, да! Здесь не придраться, конечно. Прикольный казус.


Часовой пояс GMT +3, время: 06:24.