Comments 49
поправьте что ли — примеры на каком языке то?
Я понимаю, последний пример писался для того, чтобы напомнить о разнице в скорости доступа к локальным/глобальным переменным… но давайте будем честны — функция calc в её нынешнем виде будет работать быстрее, если не создавать локальную переменную, а просто вынести умножение «за скобки», перенеся его из тела цикла в return :) Мне кажется, здесь нужен какой-то другой пример.
>> Вопрос 4. Что выведет следующая программа?
>> alert([1,2,].length + [,1,2].length);
>> Ответ 4. «5»
Конечно из серии Jscript, но стоит уточнить, что IE выведет 6.
>> alert([1,2,].length + [,1,2].length);
>> Ответ 4. «5»
Конечно из серии Jscript, но стоит уточнить, что IE выведет 6.
Второй вопрос в принципе даёт вполне ожидаемый результат. В отличи от остальных o_0
А вот alert([1,2,].length + [,1,2].length) в IE6 даёт 6.
А вот alert([1,2,].length + [,1,2].length) в IE6 даёт 6.
IE лох, вы разве не знали?
этот собака считает, что [1,2,] = [1,2,undefined], из-за чего, например, нельзя использовать такую запись (строки добавлять-удалять удобно при редактировании):
arr = [
123,
123,
123,
123,
123,
];
а на такое он вообще вывалитcя с ошибкой (тоже ведь удобно!): obj = {
var1: 123,
var2: 123,
var3: 123,
}
и приходится писать так
obj = {
var1: 123
,var2: 123
,var3: 123
,var4: 123
}
arr = [
123,
123,
123,
123,
123,
];
а на такое он вообще вывалитcя с ошибкой (тоже ведь удобно!): obj = {
var1: 123,
var2: 123,
var3: 123,
}
и приходится писать так
obj = {
var1: 123
,var2: 123
,var3: 123
,var4: 123
}
Чтобы пример 1 сказал «number»:
var a = 123;
function foo() {
alert(typeof a);
window.a = '123';
}
foo();
Проверено в V8/Chrome 4/Linux.
Капитан Жабаскрипт: переменные, объявленные вне функций (то есть глобальные), присвоены window.
var a = 123;
function foo() {
alert(typeof a);
window.a = '123';
}
foo();
Проверено в V8/Chrome 4/Linux.
Капитан Жабаскрипт: переменные, объявленные вне функций (то есть глобальные), присвоены window.
Ув. капитан Жабаскрипт, дело не в том кто куда присвоен, а в том что если в теле функции определена переменная, то функция забивает на глобальные, но пользоваться ей всеравно не дает до обьявления, собака на сене получается своеобразная, видит переменную, знает что она обьявлена, но пользоваться не дает, и знает что такая глобальная есть, но на нее забивает
Да, а если в теле функции нужна глобальная — она присвоена window.
Да, присвоена, но визуально новички не оценят это, если код будет таким как в топике. Обычно глобальные переменные используют напрямую, т.к. это короче и удобней, а здесь она не будет доступна
Еще как пример: есть «большая» функция, Вася обьявляет переменную ближе к концу, и функция перестает работать, в чем причина? ведь Вася просто обьявил переменную и все…
Еще как пример: есть «большая» функция, Вася обьявляет переменную ближе к концу, и функция перестает работать, в чем причина? ведь Вася просто обьявил переменную и все…
Что-то третий пример я даже с объяснением не понял. Можете показать, как бы выглядел код после автодополнения строк и к чему это приведет?
Javascript не надстройка, Javascript — реализация, не разгневайте Javascript =)
Я не понимаю смысла в противопоставлении Javascript и ECMAscript. Javascript это просто маркетинговое название ECMAscript и ничего больше. Реализации этого стандарта имеют свои названия, их десятки.
«Javascript это просто маркетинговое название ECMAscript»
вы ошибаетесь.
вы ошибаетесь.
я ничего плохого и не говорил, никакого противостояния нет, просто я сделал акцент на слове «надстройка»
это реализация, ECMAscript — не язык программирования, а стандарт, а Javascript — язык который «придерживается» этого стандарта… я это хотел сказать
это реализация, ECMAscript — не язык программирования, а стандарт, а Javascript — язык который «придерживается» этого стандарта… я это хотел сказать
ECMAscript — не язык программирования, а стандарт, а Javascript — язык который «придерживается» этого стандарта
Вообще, ECMAscript — это язык программирования, а стандарт — это ECMA-262 (текущая версия 5).
Самый первый пункт из ECMA-262-3:
(гребанный Ctrl-enter)
Самый первый пункт из ECMA-262-3:
Javascript (trade mark) — название языка от (Spider)monkey engine, Jscript — от Microsoft и т.д.
Кстати, самому B.Eich-у (создатель Javascript), название ECMAscript никогда не нравилось ;)
Самый первый пункт из ECMA-262-3:
This Standard defines the ECMAscript scripting language
Javascript (trade mark) — название языка от (Spider)monkey engine, Jscript — от Microsoft и т.д.
Кстати, самому B.Eich-у (создатель Javascript), название ECMAscript никогда не нравилось ;)
хренасе, а где используется ECMAscript?=)
на сколько я понимаю сам по себе он нигде не используется, типа прототипа
ECMAscript — это чистая (эталонная) реализация стандарта (возможно, без хост-среды). В таком виде, используется редко где. В качестве конкретного примера можно привести часть стандартной библиотеки невышедшего ES4 (JS 2.0) — в исходниках можно видеть множество файлов с расширением .es ;)
не самая худшая, вспомните об actionscript 1/2.
Вы заблуждаетесь, худшая, т.к все развивается, вспомните actionscript 3 и Lua… а вот Javascript на столько слабо развивается чтоя прям не знаю, с ее форками (Jscript) и кучей браузеров со своими «фичами»
ecma4 до сих пор не принят, что плачевно, согласен.
из браузеров с «фичами» претензии в основном к семейству IE (форк jscript туда же),
яваскрипт развивается, но крайне медленно, поддержки версий 1.6, 1.7, 2.0 до сих пор нет в IE.
А в actionscript 1 и 2 версий отсутствует поддержка регулярок, даже String.replace нету.
из браузеров с «фичами» претензии в основном к семейству IE (форк jscript туда же),
яваскрипт развивается, но крайне медленно, поддержки версий 1.6, 1.7, 2.0 до сих пор нет в IE.
А в actionscript 1 и 2 версий отсутствует поддержка регулярок, даже String.replace нету.
1. функция выведет undefined
2. alert(sum1(3, 4)); — выведет 7
alert(sum2(3, 4)); — вызовет ошибку sum2 is not function
3. [object Object]
4. выведет 5
5.
var Multiplier = 123; // в объекте Global
function calc() {
var s = 0,
i = 0,
localMultiplier = Multiplier,
l = arguments.length;
while (i < l) {
s += localMultiplier * arguments[i++];
}
return s;
}
2. alert(sum1(3, 4)); — выведет 7
alert(sum2(3, 4)); — вызовет ошибку sum2 is not function
3. [object Object]
4. выведет 5
5.
var Multiplier = 123; // в объекте Global
function calc() {
var s = 0,
i = 0,
localMultiplier = Multiplier,
l = arguments.length;
while (i < l) {
s += localMultiplier * arguments[i++];
}
return s;
}
а можно ссылку на список отличий ecmascript от javascript-реализаций?
Вы имеет в виду в чем конкретные реализации Javascript отходят от стандарта ECMAscript? Боюсь, тема довольно велика. Взять хотя бы тот факт, что многие браузеры расширяют Javascript по-своему.
Например:
stephenwalther.com/blog/archive/2008/02/26/javascript-magic-properties-using-count-proto-and-parent.aspx
SpiderMonkey расширяет каждый Javascript-объекта свойством "__proto__", которое ссылается на объект-прототип, и свойством "__count__", которое содержит текущее число свойств у объекта.
Например:
stephenwalther.com/blog/archive/2008/02/26/javascript-magic-properties-using-count-proto-and-parent.aspx
SpiderMonkey расширяет каждый Javascript-объекта свойством "__proto__", которое ссылается на объект-прототип, и свойством "__count__", которое содержит текущее число свойств у объекта.
На 3-ем вопросе лажанулся ) сила привычки…
серьезная проблема кстати, иногда в коде видишь то что привык видеть, а не то что там на самом деле написано
серьезная проблема кстати, иногда в коде видишь то что привык видеть, а не то что там на самом деле написано
Sign up to leave a comment.
Викторина для тех, кто любит Javascript больше ECMAscript