LINUX.ORG.RU

за что мы любим javascript

 


0

1
for(var j = 0; j < 3; j++) {
  console.log('j1 %s', j)
  for(var j = 0; j < 3; j++) {
    console.log('j2 %s', j)
  }
}



результат

j1 0
j2 0
j2 1
j2 2


В общем то я уже давно знаю что javascript так не умеет. И когда встретил неожиданное поведение, наверное и минуты не потратил... но как то осадочек.

★★★★★
Ответ на: комментарий от Vit

Нет. Но эта и многие другие «проблемы» давно решены. Ставишь линтер, чтобы ругался на всякую стрёмную фигню и пользуешься только нормальными фичами.

+1. Более того, без линтера на JavaScript что-то большое писать вообще не советую - против безумной гибкости языка можно бороться только серьезной самодисциплиной.

Qasta
()

Пять стадий программирования на жабаскрипте:

  • отрицание;
  • гнев;
  • торг;
  • депрессия;
  • принятие.

Особенно если до этого пришел с нормального языка на фронтенд. Можно его бесконечно ненавидеть, ставить линтеры, бейбелить, учить тайпскрипт. С ним просто надо смириться как с данностью, некоторые потом и любить его начинают, но я еще до этого не дошел.

nikolnik ★★★
()
Ответ на: комментарий от AndreyKl

это явно ошибка дизайна.

Проектировалось это всё для использования на допотопных компах. Так что это фича, которая позволила сильно упростить интерпретатор, тохда никто и не думал, что на js будут писать то что сейчас пишут.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Я что то сильно сомниваюсь, что выдавать ошибку при повторном объявлении было сильно сложнее/накладнее, честно говоря. Ну раз уж такой скоуп. Скорее всего банально соленили.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от vtVitus

это фича, которая позволила сильно упростить интерпретатор

Если она и позволила упростить интерпретатор, то на одну копейку. Скорее всего, это просто недосмотр.

tailgunner ★★★★★
()
Ответ на: комментарий от Qasta

Линтером не пользуются только мимокрокодилы. Но нельзя сразу вываливать столько шокирующей правды :)

Vit ★★★★★
()
Ответ на: комментарий от Qasta

и Vit

Если честно, по моему, это не очень хорошие агрументы.

Штука в том что линтер почти ничего не ловит. То что указано в оп посте линтер ловит, да. И я бы сэкономил наверное минуту или две. Но честно говоря проку от него настолько мало, что я сильно сомневаюсь что настройка литнера когда нибудь окупиться. Больно слабый инструмент. Я себе ставил когда-то когда использовал sublime как редактор — видимо я пишу как раз так как надо писать на js по мнению создателей линтера — проку короче от него не было. Ставить его на emacs я по этой причине поленился.

Скажем на haskell (или, тем более, idris) система типов действительно часто выдаёт ошибки, и, действительно много нетривиальных вещей удаётся отловить. Но линтер.. честно говоря что он есть, что его нет. Сильно удивляюсь что на линтеры так западают люди, ибо бестолково.

По гибкости — штука в том что так и про машкоды можно говорить «против безумной гибкости машкодов (или ассемблера) можно бороться только серьёзной самодисциплиной». Но на делеле - яваскрипт это просто устаревшая технология, которой пользуются люди с недостаточной квалификацией (ну или когда по другому нельзя). Это как лопата против экскаватора - да, бывает нужна, да, можно делать и ей, но в целом надо быть неадекватным чтобы копать котлован лопатой. Хотя когда то да, по другому было нельзя. И все так делали. И до сих пор мужики в огороде копают. Или даже погреб в деревне роют бывает, если денег экскаватор нанять нету. Или канализационную яму.

Всё пмсм, конечно.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от AndreyKl

Я что то сильно сомниваюсь, что выдавать ошибку при повторном объявлении было сильно сложнее/накладнее, честно говоря

Но это не ошибка. Для тех кто в танке, такой скоуп сделан для того, чтобы можно было писать так:

if (n>0) {
    var a = 1;
} else {
    var a = -1;
}
console.log(a);
Собственно в питоне и пыхе всё точно также работает. Разупорись уже.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

К сожалению, в вебе без JavaScript-а никак. Линтер позволяет чисто технические вещи отдать на откуп автопроверялке - чтобы при код ревью не тратить на них время. И ловит она в основном только мелкие ошибки и опечатки.

Касательно рассуждений об окупаемости - не забывайте, что настроить надо только один раз, а проверять она будет автоматически постоянно (при сборке, в непрерывной интеграции и т.п.). Если проект короткий - то может настройка и не окупится. Хотя если говорить об автоматическом анализе кода в длинных проектах (несколько лет разработки) - я бы смотрел в сторону sonar-а - https://www.sonarqube.org/ (у него свой анализатор). Но не будем раньше времени запугивать топикстартера.

Кстати, в своё время лично мне удавалось не париться по поводу javascript-а - писал клиента на Java (GWT). Если ТСу совсем не хочется с javascript-ом ковыряться, а пара лишних мегабайт скрипта не помеха - вполне рабочий вариант.

P.S. Да, я знаю про существование разных web assembly, google web toolkit, vaadin, type script и прочее - знать JavaScript всё равно нужно, если делаешь более-менее большой проект. Сам пишу на ECMA Script 6 (webpack + babel).

Qasta
()
Ответ на: комментарий от no-such-file

В php не так. В php не надо объявлять переменную. ПОэтому если ты используешь переменну с тем же именем, это та же переменная, самоочевидно.

Когда ты делаешь var ты предполагаешь что ты объявляешь переменную. Если такая переменная есть в данном пространстве возможны два логичных варианта поведения: если переменная объявлена внутри пространства, выдать ошибку, потому что это очевидно опечатка. Либо же, если переменная объявлена во внешнем пространстве, то создать новую переменную и не трогать внешнюю.

А таки «сделано так чтобы можно было в каждой ветке ифа написать вар а потом вывести в консоли после ифа» - собственно и есть ошибка дизайна, дурачина.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Qasta

К сожалению, в вебе без JavaScript-а никак.

ScalaJS, elm, purescript, closurescript — это навскидку. Ну и я упоминал, что я вот пытаюсь переехать на idris, хотя это конечно из экзотики.

AndreyKl ★★★★★
() автор топика

но как то осадочек.

Осадочек «я говнокодер»? Зачем во вложенных циклах использовать переменную с разным смыслом, но одним названием?

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Потому что это просто рабочая переменная. Внешняя не влияет на внутренний цикл. Страшное говнокодерство, да. Во сне присниться, не отмашешься.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Внешняя не влияет на внутренний цикл.

Это то понятно, но если у тебя во внешний цикл будет по i, а внутренний по j - читать будет проще.

У меня мозг когда видит такое кидает ворнинги «Потенциальный баг!» и нужно тратить много времени, чтобы понять - баг это или фича.

Tanger ★★★★★
()

И когда встретил неожиданное поведение, наверное и минуты не потратил... но как то осадочек.

От чего? Кто-то заставляет кодить жопой?

crutch_master ★★★★★
()
Ответ на: комментарий от Tanger

это была четвёртая, i, j, k. мне не нравится писать l (в цикле и вообще как имя переменной, из за того что на разных шрифтах иногда похоже на 1 и на I, хотя иногда пишу), i используется во втнутреннем цикле. по моему вполне норм для данного случая. назвал в итоге j1, кстати.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 4)
Ответ на: комментарий от Qasta

Кстати, в своё время лично мне удавалось не париться по поводу javascript-а - писал клиента на Java (GWT).

5 лет назад? Я посмотрел что там сейча, сообщества нет, gradle'ом кажись и не собирается (а есть ли плагины?), в ide поддержка... ну может быть в коммерческой idea так чтоб с билд системой все работало. Да еще нужно не забывать, что GWT несет свой слой рантайма в браузер. Я бы его не рекомендовал.

Сам когда стек технологий присматривал в итоге пришел к ts + webpack. Сам как java кодер, могу сказать что TS легко осваивается и прозрачно транслируется в js. VSCode отлично с ним справляется, статическая типизация хорошо работает с авто-дополнением, трансляция по сохранению файла, все ошибки тут же вываливаются, почти как в eclipse писать на java.

Aber ★★★★★
()
Ответ на: комментарий от AndreyKl

Если у тебя 4(!) вложенных цикла, да ещё и у всех неосмысленные названия переменных... Тут нет осадочка «говнокодер»?

Не было идеи вынести часть циклов в функции с осмысленными названиями и названиями параметров?

Tanger ★★★★★
()
Ответ на: комментарий от AndreyKl

Ты чо ругаешься? Сам уймись. Жопой что-то написал и язык у него плохой.
Кстати, у тебя есть лучший кандидат на встраиваемый скриптовый c-like язык?

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Кстати, у тебя есть лучший кандидат на встраиваемый скриптовый c-like язык?

ты забыл добавить «и чтобы это был яваскрипт».

я не думаю, что я жопой написал. нормальный код, который бы работал в си, яве, с++ и ещё черт его знает где. То что в яваскрипте сделали таким странным поведение вар странно ставить мне в вину.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Не было идеи вынести часть циклов в функции с осмысленными названиями и названиями параметров?

нет, не было. будет жопа с производительностью, там индекс не до 3.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

я не думаю, что я жопой написал. нормальный код, который бы работал в си, яве, с++ и ещё черт его знает где.

Стоп, не будет этот код в си работать, кажись там переменная объявленная в for(...) будет завязана на текущий скоуп а не только в теле цикла.

https://stackoverflow.com/questions/13999881/in-c-are-variables-declared-within-a-loop-local

in C89 should you decide to declare your loop counters within a for-loop declaration, the following typically produces a compiler error:

for (int i=0; i < N; i++)
    for (int i=0; i < J; i++)
        printf("%d", i);

The value of i printed will always be the value of i declared in the inner for-loop, since that is the most locally scoped version of i

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от Aber

о, и стековерфлоу-драйвен программинг подоспел, как показатель квалификации днища профессии.

молодец, чё скажешь.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Aber

5 лет назад?

Вообще-то это было лет 12 назад :) - GWT тогда был версии 1.5, насколько я помню, а IntelliJ IDEA - версии 4.5. Не помню - штатная была возможность или же плагин надо было поставить - но «заработало сразу».

Сам когда стек технологий присматривал в итоге пришел к ts + webpack.

Сейчас GWT можно использовать, хотя с его развитием совсем плохо стало - по гибкости он сильно уступает всяким React, Vue, Angular и другим. Но именно тем, что можно писать на Java вместо JavaScript он и хорош. Если же есть возможность (или согласие) выучить другой язык программирования - то надо брать что-то по современнее (тот же type script, про который вы написали).

Qasta
()
Ответ на: комментарий от AndreyKl

будет жопа с производительностью

Эээ.. Жопа с производительностью всвязи с небольшими накладными расходами на вызов функции? А что вы пишете?

https://jsperf.com/do-add-inline-test
У меня и ff и chromium сообщают о отличии результатов всего на ~2% (в пользу inline). Для тривиальной функции! Это не должно быть настолько критично чтобы писать говнокод вместо нормально структурированного кода.

Кроме того, Вас не смущает что js однопоточен (без воркеров)? И во время его работы окно перестает быть отзывчивым на действия пользователя? Или вы таки используете worker?

Для обработчки больших данных в основном потоке обычно используется разбиение всех данных на небольшие блоки и их последовательная обработка через небольшие задержки (setTimeout): http://www.leniel.net/2013/05/prevent-javascript-code-blocking-ui-thread-with...

Tanger ★★★★★
()
Ответ на: комментарий от AndreyKl

Я помню такое поведение, более 10 лет назад когда учился в универе, читал книжку по с++ и наткнулся что у меня не так работает, подумал какая плоха книга, не умеют в c++. Если скопилять с gcc test.cpp -std=c++98 -o test то будут ворнинги:

warning: name lookup of ‘i’ changed
warning: matches this ‘i’ under ISO standard rules

-std=c++11 уже нет.

Aber ★★★★★
()
Ответ на: комментарий от Aber

Рубанул с плеча. Не прав с далеко идущими выводами.

Но и скомпилять стоило кмк, ведь две минуты.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Tanger

нет, я не использую воркеры, там рисуетя гуй. Возможно функции не добавят больших проблем, но там и небольшие будут лишними, уже заметны тормоза. Что стоит использвать, на мой взгляд, так это виртуальный дом, но мне сейчас не до этого. Если проект пойдёт в продакшн и с этим будут проблемы, переделаем.

Вообще вы мне поднадоели, откровенно говоря: вопросы глуповаты и похожи на вопросы студента или новичка-идеалиста. Если вы не студент/новичёк, то складывается ощущение что вам лишь бы прицепиться, что в общем то не слишком приятно. Такие закидоны можно конечно тепреть, если человек говорит что то весьма ценное. Но вы, к сожалению, ничего кроме банальностей не говорите.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от AndreyKl

там рисуетя гуй. Возможно функции не добавят больших проблем, но там и небольшие будут лишними, уже заметны тормоза.

Полагаю, что оптимизировать вам надо не js, а операции с DOM. А js должен быть читаемым.

Вообще вы мне поднадоели

Мне очень жаль.

Но вы, к сожалению, ничего кроме банальностей не говорите.

Ваш тред тоже банален: ошибка вследствие спорного стиля кода.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Что стоит использвать, на мой взгляд, так это виртуальный дом...

Полагаю, что оптимизировать вам надо не js, а операции с DOM.

гм-гм.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Если честно, по моему, это не очень хорошие агрументы.

Разница в том, что ты оперируешь косвенным опытом (с других языков), а я прямым. IMHO у тебя типа обман зрения, но как это объяснить в твоей системе координат, я не знаю. Могу предложить только перечитать эти посты через пол года программирования на жыэсе.

Vit ★★★★★
()
Ответ на: комментарий от Tanger

Для обработчки больших данных в основном потоке обычно используется ритуальная пляска голяком на снегу вокруг костра из костылей

Будни жс-пограмиста.

bread
()
Ответ на: комментарий от Vit

Кстати, на мой взгляд твое мнение - это результат того что ты просто выучил каждую тропинку, на сколько это возможно.

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

А говоря прямо, гм, у тебя по моему конечно очень странное мировосприятие - ты совершенно не учитываешь производительность труда. а это вообще то основной момент в экономике. Я сужу хотя бы по тому что когда то ты говорил, емнип, что раз есть webassembly то бизнес начнёт, или может начать, писать на си для веба. Причём то что бизнес не пишет на си для своих обычных задач предпочитая яву и с# тебя нисколько я так понял не смутило. Ну и ещё по некоторым моментам.

Но ты достиг весьма заметного уровня, опять же пмсм, конечно, в области оптимизации. И лично я уважаю этот профессионализм. А недостатки у всех свои.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 2)
Ответ на: комментарий от AndreyKl

Жикваери не считается. 10 лет жыэса без линтера - это очень подозрительный экпириенс. Возможно, у тебя основной упор был на пыхе и на жыэс оставались только декоративные рюшечки.

Vit ★★★★★
()
Ответ на: комментарий от Vit

knockout, angular считаются?

По литнеру, сказал же, до текущего емакса был sublime, линтер стоял. Пользовался - бестолково. лень было настраивать на емаксе, всё равно толку ноль.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

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

Мне некогда страдать подобным :). Если стоит вопрос как сподручнее писать на жыэсе - могу дать конкретные и внятные ответы. А рассуждать про идеальные языки - это без меня.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Если стоит вопрос как сподручнее писать на жыэсе - могу дать конкретные и внятные ответы.

Спасибо конечно, но единственный внятный ответ на этот вопрос - не писать на джиэсе если можно не писать на джиэсе. А это можно почти всегда, слава богу не дветыщи десятый год на дворе. :)

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Это вкусовщина, нет предмета обсуждения. Мои замечания относились к конкретной аргументации.

Vit ★★★★★
()
Ответ на: комментарий от AndreyKl

Не готов по кнокакуту и ангуляру гадать. При моих объемах кодить без линтера - это совсем дно. Много затрат на починку опечаток, плюс coding style в команде невозможно выдержать.

Vit ★★★★★
()
Ответ на: комментарий от AndreyKl

В php не так. В php не надо объявлять переменную. ПОэтому если ты используешь переменну с тем же именем, это та же переменная, самоочевидно.

В php область видимости точно такая же и твой пример из стартового поста будет работать точно также «неожиданно». Дело тут не в объявлении переменной, а в обозначении локальных/глобальных переменных. В некоторых языках, в т.ч. js нужно обозначать локальные переменные, а остальные считаются глобальными. В пыхе и питоне наоборот, нужно обозначать глобальные переменные, а остальные считаются локальными. Первый подход (как в js) более древний и вообще более характерен для «скриптовых» языков в исконном смысле, в частности он используется в sh и perl.

Когда ты делаешь var ты предполагаешь что ты объявляешь переменную

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

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Дело тут не в объявлении переменной, а в обозначении локальных/глобальных переменных.

Да нет, как раз дело во «вводе» переменной в контекст (использую это слово, раз объявление не подходит). И перепишу ответ с php с использованием слова «вводить» чтобы ты не цеплялся.

Пример с php не в тему, потому что переменную не надо «вводить», и такой неоднозначности (ввод одной и той же переменной дважды) просто не возникает. Нельзя начать думать что в цикле разные переменные если они имеют одно и то же имя. Или в ифе. Или ещё где.

В си, я так понял, тоже раньше так было, как тут выяснилось. Но это убрали, что разумно. Потому что лажа. А js так и тащит эту неадекватность, хотя уже даже замена есть и даже везде работает, вроде.

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

Честно говоря я действительно не знаю указанную разницу о «модификаторах видимости» и «объявлениях».

Но опять же честно говоря, мне это совершенно неинтересно.

То что поведение яваскрипта неожиданно, кажется, очевидно для всех в этом треде кроме нескольких особо глубоких знатоков. Даже авторы языка, введя let косвенно это подтвердили.

Даже ты, честно говоря, косвенно это подтвердил когда вопил про

Для тех кто в танке, такой скоуп сделан для того, чтобы можно было писать так:

Т.е. сейчас выходит что он не введён для того чтобы писать так, а это просто так и должно быть из за того что var де не объявление, а модификатор. Угу, я понял. Кто то сбегал, прочитал вики, а теперь кичиться своей грамотностью в технологиях прошлого века. Ну молодец, историк, чего уж там.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от Vit

Это вкусовщина, нет предмета обсуждения.

Ну что ж, в таком случае и говорить не о чем больше, тогда спасибо большое, если мне вдруг понадобиться твоё мнение как эксперта по морально устаревшей технологии я тебя обязательно позову.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

потому что переменную не надо «вводить»

Так и в js переменную не надо «вводить». От того что ты уберёшь var проведение твоего примера не изменится. var - это просто модификатор, который показывает, что переменная локальна для функции. Да, название выбрано неудачно, нужно было не выёживаться и использовать слово local, как в том же bash.

То что поведение яваскрипта неожиданно, кажется, очевидно для всех в этом треде

Для всех школьников.

Впрочем, я согласен, что в js в то время уже можно было сделать более прогрессивно, тем более, что язык разрабатывался с нуля и функции в нём были изначально. Я думаю что это было мотивировано тем фактом, что глобальных переменных тупо больше и перечислять все эти DOM элемены frame, form и т.д. быдло бы очень нудно. Сейчас это не используется, а просто получают нужный элемент через querySelector, но язык уже сложился.

no-such-file ★★★★★
()
Ответ на: комментарий от AndreyKl

Просто не пиши глупости о том, в чем не разбираешься.

Vit ★★★★★
()
Ответ на: комментарий от AndreyKl

И зачем было с обсуждения технических вопросов переходить на личности? Вопрос риторический.

Qasta
()
Ответ на: комментарий от no-such-file

Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.

Вот гляди,

var a = 2
function getA() {
  // var a = 3

  // if(condition) {
  //   var a = 4
  //   
  //   if(condition2) {
  //     return a
  //   }
  // }

  return a
}
Если раскомментировать первую строку в функции, то вернётся 3, а иначе возвращается 2.

Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).

До сих пор поведение логично и отвечает ожиданиям.

Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.

Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition2.

Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.

Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.

Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.

Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.

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

То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).

Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.

AndreyKl ★★★★★
() автор топика
Последнее исправление: AndreyKl (всего исправлений: 6)
Ответ на: комментарий от AndreyKl

Писать на языке 10 лет и не знать области видимости переменных, это сильно.

anonymous
()
Ответ на: комментарий от AndreyKl

Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.

Тебе просто сказали, что пример из первого поста не актуален уже много лет по куче причин. И объяснили с примерами все причины. Вроде даже без намеков на твои умственные способности. Но для человека, которому отвечали серьезно, ты реагируешь мягко говоря странно.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.