Я получаю следующую ошибку в Visual Studio 2008:
Ошибка 1 Локальная переменная с именем 'i' не может быть объявлена в этой области видимости, поскольку она придала бы другое значение значению 'i', которое уже используется в области видимости 'child' для обозначения чего-то другого
Это мой код:
for (int i = 0; i < 3; i++)
{
string str = "";
}
int i = 0; // scope error
string str = ""; // no scope error
Я понимаю что str
перестает существовать после завершения цикла, но я также думал, что область действия i
была ограничена для цикла
.
Так i
имеет ту же область видимости, что и переменная, объявленная сразу за пределами для цикла
?
Редактировать:
Просто для ясности, я использую C #. Я обсуждаю удаление тега "C". Однако, t JS будет неплохо, как ... Вот кое-что, о чем я размышлял после бесчисленных часов, пытаясь настроить JS для кросс-браузерной совместимости (в основном IE): Почему не соответствует Javascript в разных браузерах? Я имею в виду, почему JS не может быть таким хорошим, как Java и Flash? Вместо этого мы должны прибегнуть к таким фреймворкам, как jQuery. Не поймите меня неправильно, они делают мою жизнь проще - но почему они вообще существуют? Есть ли для этого историческая причина? Компании, выпускающие браузеры, просто поставляют свой собственный движок JS? Какова политика, которая делает стандартизацию настолько трудной? (Примечание: я понимаю, что значительная часть проблемы связана с DOM, но вопрос остается).
Основной язык Javascript по большей части согласован (Ссылаясь на ECMAScript версии 3, выпущенной в 1999 г.)
Это реализации DOM которые вызывают головные боли. Отчасти потому, что в какой-то момент не было спецификации DOM, поэтому браузеры могли делать все, что они хотели, с точки зрения создания правил для доступа и управления элементами html на веб-странице.
Например:
window.addEventListener
для браузеров, поддерживающих DOM, а window.attachEvent
для IE. textContent
для браузеров, поддерживающих DOM, innerText
для IE. getElementById
содержит ошибки в IE и Opera, поскольку возвращает элементы по имени getAttribute ('href')
возвращает несовместимые значения Есть также проблемы, связанные с поддержкой CSS браузером.
Несогласованность ядра языка может быть такой же, как
Но да, вкратце, дело в том, что раньше стандарта не было. С тех пор w3 разработал стандарты, но у каждого поставщика браузеров есть свои способы их реализации. Нет руководящего органа, который заставлял бы поставщиков полностью применять спецификацию.
Браузеры создают собственную реализацию, простую и понятную. По этой же причине рендеринг, CSS и все остальное в разных браузерах различаются. Java / Flash / и т. Д. являются более универсальными, потому что они абстрагируются от браузера и доступны через какой-то плагин. Но их фактические основные реализации отделены от браузера и контролируются одним поставщиком.
Компании, выпускающие браузеры, просто поставляют свой собственный JS-движок?
Да, это, вероятно, основная причина. Единого JS-движка не существует; есть различные реализации ECMAScript.
В дополнение к другим ответам: для этого есть историческая причина. Я могу написать это сам, но цитирование Википедии легче для пальцев:
JavaScript был первоначально разработан Бренданом Эйхом из Netscape под под названием Mocha, которое позже было переименовано в LiveScript, и, наконец, в JavaScript. LiveScript был официальным названием для языка, когда он впервые появился в бета-версии Netscape Navigator 2.0 в сентябре 1995 года, но он был переименован в JavaScript в совместном совместном объявлении с Sun Microsystems от 4 декабря 1995 года, когда он был развернут в браузере Netscape версии 2.0B3.
[...]
JavaScript очень быстро завоевал широкий успех в качестве клиентского язык сценариев для веб-страниц. В результате как следствие, Microsoft разработала совместимый диалект этого языка, назвав его JScript, чтобы избежать проблем с торговой маркой чтобы избежать проблем с торговой маркой. JScript добавил новые методы даты чтобы исправить несовместимые с Y2K методы в JavaScript, которые были основаны на java.util.Date. JScript был включен в Internet Explorer 3.0, выпущенный в августе 1996 года. Диалекты воспринимаются настолько похожими, что термины "JavaScript" и "JScript" часто используются как взаимозаменяемые. Microsoft, однако, отмечает десятки способов, с помощью которых JScript не соответствует требованиям ECMA.
В ноябре 1996 года компания Netscape объявила о том. что она представила JavaScript на рассмотрение Ecma International для рассмотрения в качестве промышленного стандарта, и последующая работа привела к появлению стандартизированной версии под названием ECMAScript.
Как видите, стандарт, ECMAScript, был разработан позже, чем оригинальный язык. Речь идет лишь об адаптации этого стандарта в текущих реализациях веб-браузеров, что продолжается до сих пор, как и разработка самого ECMAScript (например, см. спецификацию ECMAScript 5, опубликованную в декабре 2009 года).