![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Сisa |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Почему, если убрать комментарий, то все перестает выполняться :
Точнее, можно ли как то сделать так, чтобы убрав комментарий функция выполнялась так же, как и вместе c закомментированной строкой, т .е. с образованием нового одноименного объекта "as" ? (про "Объявления, именование и «поднятие» переменных и функций" читал, пробовал, не получается обхитрить :( и что совсем-совсем нельзя? никак? ) Это сообщение отредактировал(а) Сisa - 3.5.2015, 13:50 |
|||
|
||||
MeGaBoJIbT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 2.5.2012 Репутация: 1 Всего: 1 |
Потому что интерпретатор создает локальные переменные на этапе входа в функцию и ему все равно где объявить переменную, в середине функции или в начале.
То есть если кусок раскомментить, то глобальной переменной as внутри функции не будет, и программа начнет вести себя неожиданно) Да, в рекурсивных функциях естественно могут использоваться локальные переменные, потому что для каждого рекурсивного вызова создается свой контекст выполнения, включающий в себя локальные переменные. Чрезмерно упрощая, рекурсивная функция - это как бы много очень похожих друг на друга функций, а не одна. Хорошо это расписано здесь: https://learn.javascript.ru/recursion Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Сisa |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Благодаря Вам MeGaBoJIbT я это уже почти понял :(( ,
но все же как то очень хочется чтобы хоть как то, но выполнить это вот невозможное ![]() Однако. Это все недоработки то ли языка, то ли браузера! ![]() ![]() Есть локальные - и должны они быть локальными, а глобальные - на то они и глобальные ![]() В итоге отказался от одноименных названий переменных, объектов, функций в js, а заодно и id в css. |
|||
|
||||
MeGaBoJIbT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 2.5.2012 Репутация: 1 Всего: 1 |
Выполнить что? Назвать одинаково глобальную и локальную переменную в рамках одной функции?
Мне не приходит в голову как это можно сделать в js, и главное зачем. Хорошая практика программирования на большинстве языков - осмысленно и содержательно именовать переменные. Хорошая практика программирования на js - не засорять глобальную область видимости. Поэтому когда возникает желание назвать локальную переменную как глобальную это плохо само по себе. А если еще и необходимо использовать локальную перменную и одноименную ей глобальную в одной и той же функц, то кто-то явно что-то делает не так. 99% что браузер отношения к этому не имеет и это написано в стандарте языка, правда искать конкретную строчку в стандарте чтобы увериться, мне влом. Мне кажется неправильно считать это "недоработкой" языка. Программирование - сложная, неинтуитивная штука by design, каждый язык имеет множество таких вот нюансов. Большинство нюансов обусловлены особенностью задач которые стоят при разработке языка, упрощают решение одних задач, и в то же время усложняют другие. JS изначально создавался как простейший инструмент для работы с html-страничками. Есть легенда что всю грамматику языка, стандарт и интерпретатор разработали с нуля примерно за пару недель. Никто не представлял во что он вырастет. Другие нюансы обусловлены опытом разработки. То что при первом взгляде новичка может казаться страшным косяком языка, может при более близком изучении оказаться огромным плюсом. В общем, резюмируя, это не недоработка, а просто немного неинтуитивное поведение языка, которое есть в каждом языке. Появится опыт и такое поведение станет интуитивным =)
Давно пора) Алгоритмы - это алгоритмы, а данные - это данные, одинаково называться им ни к чему |
|||
|
||||
Сisa |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Но вот хочется же! ну чтобы это невозможное стало возможным, наверно надо подождать новой версии языка, и когда нынешние стандарты устареют?
Читая мануалы встречаешь, что вот так делать нельзя, одноименные локальные глобальные и т.п., думал может быть есть такой яп который не имеет подобных проблем и начал читать asm, но и там оказывается есть свои заморочки, казалось бы asm это же чистое электричество, вольты и амперы, нули и единички и не javascript : ) javascript один, един, в отличие от asmов : ) Почему начал тему? потому что в скрипте потребовалось создать объекты в нескольких функциях на основе имеющегося в глобальной видимости объекта, но каждый из новых будет самостоятелен, а в этом начальном объекте есть ссылки на него же, но без this а по имени, к тому же первоначальный объект надо было удалять, и вот чтобы не переделывать/переписывать заново весь объект и решил поэкспериментировать. Результат отрицательный. А ведь могло же получиться? Нельзя же жить шаблонами и стандартами, так пожалуй творчеству места не останется? И почему в js new какое то такое, что требуется clone - стандарт? MeGaBoJIbT Вы так хорошо все объяснили, и так твердо в это верите, что я полностью с Вами согласен! Спасибо за терпение! |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Можно еще написать свой язык ![]()
случайно, не будет решением этой странной задачи? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Сisa |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 18.1.2013 Репутация: нет Всего: нет |
Однако.
Это не только недоработки языка, и браузера, а в первую очередь программера! Вот не зря же попросил помощи на форуме - ksnk в одно движение все порешал !!! Творчеству все же место не ограничено, особенно когда есть такие знающие люди. Дело мастера боится? один штрих все поменял! Ну то есть и переменной то не нужно, и имя ей не нужно, совсем. И казалось бы - а почему бы сразу так взять да и не написать? Свой язык заманчиво ... , но явно мне не по силам, а то бы с удовольствием ![]()
Это сообщение отредактировал(а) Сisa - 5.5.2015, 21:24 |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |