Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> var дважды, определение переменной 
:(
    Опции темы
Сisa
Дата 26.8.2014, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Код

try{
var a = 7;
var a = 8;
alert(a)
}catch(e){alert(e.name)}

Ошибку не показывает, значит так можно делать?
PM MAIL   Вверх
Aliance
Дата 27.8.2014, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



А почему нельзя? Просто перетираешь переменную.
PM MAIL WWW ICQ Skype   Вверх
Сisa
  Дата 27.8.2014, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Видимо js просто "прощает" подобный кодинг, 
но не везде так:
Код

#!/usr/bin/perl
my $a=7;
my $a=8;
print $a; # -->8

Warning: Content-Type header not found in the script output. If this is not a CGI script, please use the Run -> Run in Command Prompt menu to run it.
"my" variable $a masks earlier declaration in same scope at Untitled line 3.
и это даже без use strict;
scope - разное   smile  
PM MAIL   Вверх
diadiavova
Дата 27.8.2014, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Aliance @  27.8.2014,  08:58 Найти цитируемый пост)
А почему нельзя?

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Aliance
Дата 28.8.2014, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



diadiavova, ну и кто в этом виноват? ЯП или программист? Чтобы такого не было придумали понятия неймспейсов, скоупа и замыканий.
PM MAIL WWW ICQ Skype   Вверх
Сisa
Дата 28.8.2014, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Нет, ну все хорошо, и то что "прощает", и то что придумали разные понятия, и что перетираешь, и что тестировать надо не абы как, а с усердием. Просто сначала не заостряешь внимание на область видимости и т.п.
PM MAIL   Вверх
diadiavova
Дата 28.8.2014, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Aliance @  28.8.2014,  10:06 Найти цитируемый пост)
diadiavova, ну и кто в этом виноват? ЯП или программист? Чтобы такого не было придумали понятия неймспейсов, скоупа и замыканий. 

Виноват однозначно язык программирования. Я, конечно, понимаю, что если придерживаться определенных правил, то можно избежать множества проблем. И вообще любые недостатки языка вполне можно компенсировать профессионализмом программиста, но, здесь ведь речь не об этом. 
Во-первых, никакие манипуляции не гарантируют, что проблема не возникнет вообще, а стало быть предложенное тобой решение - довольно кривой костыль.
Во-вторых, любая фича, существующая в языке, какую бы потенциальную опасность она ни несла, обычно несет с собой и что-то полезное. Честно говоря, я не могу придумать ни одной ситуации, в которой из возможности повторного объявления переменной можно было бы извлечь хоть какую-то пользу. В этом смысле вообще непонятно для чего надо закладывать такие грабли в язык, ведь ошибки, которые могут от этого возникнуть - отловить довольно трудно, даже имея очень развитые средства отладки, а яваскрипт, насколько мне известно, похвастаться навороченными отладчиками не может. И при этом пользы фича вообще не несет никакой( если ты с этим не согласен, то не сочти за труд и приведи хоть один пример полезности такой фичи).

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





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.