|
хитросплетения Global,контекст,this,Reference
Не въезжаю в стандарт, может кто поможет:
Вот почему так получается : function al(o){document.write(o,'<br>')} // для html function al(o){WScript.Echo(o)} ; // для WSH for (var x in this) al([[x]]) // Здесь Ошибка после распечатки первого значения свойства Глобального объекта (или this, не знаю - совпадут ли они ...) // Ошибка выполнения Microsoft JScript: Предполагается наличие объекта (function qq() {})(); // - вызывает ошибку в for in см выше, если строчку закоментировать, или сделать так v=(function qq() {})() , то ошибки нет ! // даже так (function qq() {return {}})() , т.е. вроде как я возвращаю обхект в качестве свойства, но все равно возникает та же ошибка в for in выше (1); // - та же ошибка в for in 1 ;// - не вызывает ошибки, т.е. вроде как свойствами глобального объекта могут быть примитивные значения . а не только объекты ?! Если кто понимает хитросплетения Global,контекст,this,Reference (в стандарте) , объясните, плз, понятными словами , я пока никак не могу въехать. |
Точку с запятой надо ставить после al([[x]]).
пысы: "Хитросплетения Global,контекст,this,Reference" понимаю, но желательно получить более конкретный вопрос. ;) |
2 Zeroglif > на точку с зпт я - то и не подумал. В этом-то собствно и была причина непоняток.
Вот правда еще есть - ведь все реализации обязаны делать расширяемыми свойства всех своих объектов в том числе и объектов среды типа WScript? Или я не правильно понимаю? Но MS почему-то сделал this.WScript не могущим добавлять новые /переопределять существующие свойства у этог объекта. Как такое понимать ? |
Цитата:
|
Вот еще вопрос :
function al(o){document.write(o,'<br>')} ; for (var x in this) {al([[x]]) } ; // здесь будет function Person() { al("qqq") } ; function Person() { al("zxc") } ; ///* var Person = function () {al("123")}; // */ function Person() { al("qqq") } ; al(Person) ; // Здесь распечатается function () {al("123")} Person() ; // 123 здесь вызовется, соответствующая var Person=function Почему глобальный объект получает в качестве свойства Person то , которое в строке function Person() ... , а не которое в строке var Person = function ... ? |
потому что вы переопределили Person, т.е. объявили еще раз эту функцию, но другим способом.
|
twolf,
я тоже так подумал сперва.но это не так. как вы объясните такой код, тогда function al(o){document.write(o,'<br>')} ; al(Person) ; var Person = function () {al("123")}; function Person() { al("zxc") } ; al(Person) ; как видите второй вывод показываете первую функцию, а первый вывод показывает вторую функцию но с первым выводом понятно.он показывает именованную функцию, поэтому успешно срабатвает до ее определения. PS я так подозреваю, что сперва в глобальную область видимости пихаются именованные функции, и лиш затем по порядку анонимные.в свете такой теории, становится понятно почему эти два примера так работают |
2 twolf ,Gvozd> Да я подправил предыдущий пост
|
походу мои измышления верны только для общего контекста
то есть достаточно обернуть любой из кодов выше просто в фигурные скобочки, для смены контекста, и уже будет работать нормальная логика, с переопределением все, что я сейчас написал было результатом моих размышлений, а не точным знанием |
Цитата:
|
Часовой пояс GMT +3, время: 01:54. |
|