В консоли выполняется просто eval в глобальном контексте. У eval есть особенность в том, что переменные объявленные внутри него не получают флаг configurable = false и поэтому могут быть удалены. Тот код, котый исполняется между тегами исполняется нормально, внутренней функцие как например в node.js/v8 — runInContext. Это конечно трактовать как первую функцию, например в Chakra в новых ие, это выполнение и есть первая функция. Вся особенность глобального объекта в том, что ключевое слово this этой функции указывает на LexicalEnvironment этой же функции и получается так, что присвоить свойство или объявить переменную этому объекту почти одно и тоже, за исключением, алгоритмов исполнения. В общем виде псевдо код этой функции выглядит так:
function runInContext(context, code) {
with (context) {
(function() {
eval.call(context, code);
}).call(context);
}
};
function runInStrictContext(context, code) {
(function() {
eval.call(context, code);
}).call(context);
};
Конечно оно так не будет работать и это не лучший пример, однако относительно может помочь понять.
Аглоритм объявления переменных и так понятен, непонятно, что в нём вы такого интересного нашли, разве что для тех, кто только его узнал.
Но давайте разберёмся. Для глобального контекста:
1. Объявление переменных и своств не одно и тоже (Разные алгоритмы соответственно).
2. Обращение к переменным и свосвам может быть взаимо заменяемое. (С учётом правил конечно, первого пункта).
var foo;
this.bar = void 0;
alert(bar);
alert(this.foo);
3. Поведение переменной и свойста, и итоговое сохранение в контексте одинаковое (Как видно из премера с дескрипторами — никакой разницы).
4. Такое объявление:
"use strict";
foo = 1;
Это не объявление свойства глобальному объекту или какому либо ещё в прямом смысле. Это объявление верно только тогда, когда используется оператор with.
var env = {};
with (env) {
foo = 1;
}
Но так как strict mode запрещает использовать with, отключает его. Логично, что и объявление свойства глобальному контексту таким образом отключается (да именно свойства потому, что она работает по алготирму объявления свойства. Объявление переменной работает по другому алгоритму, но в итоге, это тоже свойство объекта).
Ну конечно нет, не знаю. Но это не важно. Я всего лишь указал на то, что ваш пример неправилен, вне контекста правы ли вы в этой ситуации или нет. У вас просто там было ошибка.
Далее, по поводу спора.
var test = 123;
var pd = Object.getOwnPropertyDescriptor(this, 'test');
pd.value = 321;
Object.defineProperty(this, 'test2', pd);
delete test;
delete test2;
console.log(test);
console.log(test2);
Вообще, по хорошему, вы правы. Переменная это не тоже самое, что свойство. Но в частном случае глобального контектса — это тоже самое. Ну и ещё, если добавить в pd, writable = false, то получится эмуляция const.
Врятли в 13ой применят. У разработчиком точно есть план работы и всё такое. То есть текущую версию фиксят только по критичским проблемам, например безопасности. Думаю просто нужно дождаться 14ой версии.
Я думаю сразу после того, как статус станет RESOLVED, а потом VERIFIED в баге. Хотя я на самом деле не уверен. Многие баги фиксят и патчат в hg Мозилловский, но не включают в билды по некоторым причинам. Если баг посчитают актуальным, а «фичу» не эксперементальной, то видимо, постараются сразу как смогут.
Вообще, раз Nightly билдится каждую ночь по нескольку раз, видимо туда попадаются все фиксы которые уже в репозитории. Ведь это же dev сборки.
DOMPaser не должен выполнять не скрипты, не стили, не тем более HTTP запросы. Если это происходит, то это явный баг. В wiki и в спецификации указано, что он не должен этим заниматься. Если вы говорите про Blob, то в него нужно запихивать потом. Blob это грубо говоря sandbox, или файл в памяти браузера. Из этой памяти можно строить странички например, картинки или скрипты.
Только, что проверил. В стабильной Лисе работает правильно.
На счёт протестить их патч — протестить не получится естественно в автоматических сборках. Что бы протестить нужно сказать и сбилдить mozilla-central, а потом пропатчить diff из багзиллы.
Точно так же можно сказать, что JavaScript писать легко. А знать тонкости всех барузеров и спецификаций, опыт со всеми возможностями HTML5 и реальный опыт построение приложений. Далеко не 70 и не 100к стоит.
Если вы сомневаетесь в этом — попробуйте написать любой доклад и прочитать его перед неизвестными вам людьми, скажем, около офиса, не вызвав усмешку хотя бы одного из них. После этого напишите в комментариях, с какого раза это получится сделать :)
Ну нормально, я выступал перед советом деректоров с АЙТИ докладом в первый месяц работы, первый раз их видел, всё нормально. Больше пренебрежения было из-за слайдов из 90ых, когда видишь такие слайды, сразу складывается, что и человек от туда и, что опыта в современных технологиях у него почти нет. Точно так же, когда докладчик сам верстает пресентацию, хоть и например на фреймвокре (так, получается, что можно верстать на JS фреймвокре ;) ) как impress.js, то тогда болучается гораздо более красачно и впечатлительно.
Это всё к тому, что не работает курсор с url(). Собственно без этого и эказанной ниже функции для анимации, невозможно делать нормальные игры (да возможно, но это уже точно будет не то, что можно сделать в Хроме или Лисе).
Я вижу код содержащий грубые ошибки. В таком виде он не применим в сколь-либо серьёзном проекте. А в мелких, где можно обойтись списком функций в глобальной области видимости — АОП не нужно совсем
поэтому и ошибки вы видите те, которые возникнут при применении на вашем проекте, а для моей задачи их не возникнет.
Ну и смысл от вашего коммента, если вы только, что признали безсмысленность вашего поста? Вообще, пошла такая тенденция — перенеси паттерн из другово языка и сделай вид, что знаешь JavaScript.
Это только первая ступенька. В ближайшее время планируется внедрить большее количество полезных вещей для разработки под мобильные устройства. Ниже упомянутая плотность экрана тоже планируется. В общем представьте, что к релизу 15ой Firefox у вас будет полный эмулятор моб. устройства в браузере.
Конечно оно так не будет работать и это не лучший пример, однако относительно может помочь понять.
Но давайте разберёмся. Для глобального контекста:
1. Объявление переменных и своств не одно и тоже (Разные алгоритмы соответственно).
2. Обращение к переменным и свосвам может быть взаимо заменяемое. (С учётом правил конечно, первого пункта).
3. Поведение переменной и свойста, и итоговое сохранение в контексте одинаковое (Как видно из премера с дескрипторами — никакой разницы).
4. Такое объявление:
Это не объявление свойства глобальному объекту или какому либо ещё в прямом смысле. Это объявление верно только тогда, когда используется оператор with.
Но так как strict mode запрещает использовать with, отключает его. Логично, что и объявление свойства глобальному контексту таким образом отключается (да именно свойства потому, что она работает по алготирму объявления свойства. Объявление переменной работает по другому алгоритму, но в итоге, это тоже свойство объекта).
Далее, по поводу спора.
Вообще, по хорошему, вы правы. Переменная это не тоже самое, что свойство. Но в частном случае глобального контектса — это тоже самое. Ну и ещё, если добавить в pd, writable = false, то получится эмуляция const.
Вообще, раз Nightly билдится каждую ночь по нескольку раз, видимо туда попадаются все фиксы которые уже в репозитории. Ведь это же dev сборки.
Только, что проверил. В стабильной Лисе работает правильно.
HTML5 в конце концов :)
Ну нормально, я выступал перед советом деректоров с АЙТИ докладом в первый месяц работы, первый раз их видел, всё нормально. Больше пренебрежения было из-за слайдов из 90ых, когда видишь такие слайды, сразу складывается, что и человек от туда и, что опыта в современных технологиях у него почти нет. Точно так же, когда докладчик сам верстает пресентацию, хоть и например на фреймвокре (так, получается, что можно верстать на JS фреймвокре ;) ) как impress.js, то тогда болучается гораздо более красачно и впечатлительно.
Просто моё мнение, не в обиды никому :)
developer.mozilla.org/en/CSS/cursor
Ну и смысл от вашего коммента, если вы только, что признали безсмысленность вашего поста? Вообще, пошла такая тенденция — перенеси паттерн из другово языка и сделай вид, что знаешь JavaScript.