Author |
Message |
KES
Участник форума

Joined: 19 Oct 2006
Posts: 214
Карма: 0 поощрить/наказать
Location: сВознесеновка, Мелитопольский р-н, Запорожская обл. Украина
|
Posted: Wed Sep 05, 2007 9:03 am (написано за 28 секунд)
Post subject:
|
|
2AKS =(... Тогда какие же отличия?
|
|
Back to top |
|
 |
AKS
Участник форума
Joined: 28 Dec 2005
Posts: 1174
Карма: 102 поощрить/наказать
|
Posted: Wed Sep 05, 2007 10:18 am (спустя 1 час 15 минут; написано за 3 минуты)
Post subject:
|
|
KES wrote: |
Тогда какие же отличия? | Ну какие отличия могут быть там, где "контекст конструктора объекта" vs "контекст объекта"? А вообще, вопрос, на который Вы решили ответить, не такой уж простой - прочитайте еще раз. ;)
|
|
Back to top |
|
 |
An6rey
Участник форума
Joined: 30 Aug 2007
Posts: 69
Карма: 3 поощрить/наказать
|
Posted: Fri Sep 07, 2007 8:20 pm (спустя 2 дня 10 часов 1 минуту; написано за 39 минут 49 секунд)
Post subject:
|
|
KES wrote: |
Интересно узнать, можно ли как нибудь вытянуть список всех локальных переменных? | Список локальных переменных можно "вытянуть", разобрав someFunction.toString() - текст функции. Привожу участникам форума один интересный пример, когда объект window браузера и встроенная функция , которая многими воспринимается как глобальный контекст, имеет ссылку на разные объекты. Функция eval() и window.eval() (Opera, FireFox, Neyscape, not IE) действуют по-разному. Всторенная функция eval() выполняет код в текущем локальном контексте. В то время как window.eval() выполняет код всегда в глобальном контексте (подобно execScript() в IE).
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Wed Sep 12, 2007 5:23 am (спустя 4 дня 9 часов 3 минуты; написано за 12 минут 6 секунд)
Post subject:
|
|
Столкнулся с эфектом, который пока не понимаю как объяснить. Система мнофреймовая, но интересует нас сейчас только два - top и один вложенный. Main.html:Child.html: Code (JavaScript): | скопировать код в буфер обмена | function SC () { this.oDC = new top.DC(); // Проблемная строка }
SC.prototype = { AA : function () { top.SV (); } };
oSC = new SC (); oSC.AA (); // Если проблемная строка есть, то получаем 'DC.SV', без нее - 'top.SV' | Выкрутился вынесением всех ф-й свойств DC совпадающих по именам с глобальными ф-ями в прототип DC. Но понимания происходящего нету.... Догадка такая. Создавая объект new top.DC() мы контекст самой ф-ии DC ставим глобальную облать top и все, на что ссылается this в ней попадает в глобальный контекст top. Иного объяснения не вижу. Но почему именно так происходит мне совсем не очевидно...
|
|
Back to top |
|
 |
AKS
Участник форума
Joined: 28 Dec 2005
Posts: 1174
Карма: 102 поощрить/наказать
|
Posted: Wed Sep 12, 2007 6:31 am (спустя 1 час 7 минут; написано за 1 минуту 54 секунды)
Post subject:
|
|
dimagolov wrote: |
Если проблемная строка есть, то получаем 'DC.SV', без нее - 'top.SV' | Повезло Вам, а я такого не увидел ни в фреймсете, ни в странице с ифреймом. У меня:Все, как задумано...
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Wed Sep 12, 2007 4:14 pm (спустя 9 часов 42 минуты; написано за 3 минуты 33 секунды)
Post subject:
|
|
AKS wrote: |
Повезло Вам, а я такого не увидел ни в фреймсете, ни в странице с ифреймом. У меня: Все, как задумано... | я тоже слегка не поверил своим глазам, но проблема была, меня не глючило. попробую воспроизвести на тестовом примере - на рабочей системе не демонстративно
|
|
Back to top |
|
 |
KES
Участник форума

Joined: 19 Oct 2006
Posts: 214
Карма: 0 поощрить/наказать
Location: сВознесеновка, Мелитопольский р-н, Запорожская обл. Украина
|
Posted: Mon Oct 22, 2007 7:22 pm (спустя 1 месяц 10 дней 3 часа 8 минут; написано за 2 секунды)
Post subject:
|
|
alternateidea.com/blog/articles/2007/7/18/javascript-scope-and-binding
|
|
Back to top |
|
 |
wwt
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed Nov 07, 2007 11:20 am (спустя 15 дней 15 часов 57 минут; написано за 6 минут 3 секунды)
Post subject:
|
|
чтото я несовсем уловил суть но: window.onload=www function www(){ var Q = '"Пример объявления'; // объявление локальной переменной для этой функции W = ' переменной.'; // объявление глобальной переменной var S = W; // создаем локальную копию переменной для текущей функции alert(Q+S+'"'); // выведет: "Пример объявления переменной." alert(Q+W+'"'); // выведет: "Пример объявления переменной." alert(Q+ttt());//выведет: "Пример объявления переменной.Вот и всё." } function ttt(){ W += 'Вот и всё."';// переопределяем значение глобальной переменной return W //возвращаем }
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Nov 08, 2007 1:53 am (спустя 14 часов 32 минуты; написано за 13 секунд)
Post subject:
|
|
wwt, а что вызывает сомнения?
|
|
Back to top |
|
 |
Г.О.
Участник форума
Joined: 22 Feb 2006
Posts: 378
Карма: 13 поощрить/наказать
Location: Ленинград
|
Posted: Thu Nov 08, 2007 3:47 pm (спустя 13 часов 54 минуты; написано за 51 секунду)
Post subject:
|
|
Quote: |
W = ' переменной.'; // объявление глобальной переменной | Не объявление глобальной, а присвоение значения переменной из объемлющего контекста. Если ни в одном из контекстов не найдется - прилипнет к глобальному.
|
|
Back to top |
|
 |
Wild Pointer
Заглянувший

Joined: 20 Feb 2008
Posts: 5
Карма: 0 поощрить/наказать
|
Posted: Thu Jul 17, 2008 10:56 am (спустя 8 месяцев 8 дней 19 часов 9 минут; написано за 2 минуты 50 секунд)
Post subject:
|
|
Quote: |
var Q = '"Пример объявления'; // объявление локальной переменной для этой функции W = ' переменной.'; // объявление глобальной переменной | Это то всё понятно, только вот предупреждение: assignment to undeclared variable W Т.е. я должен где-то заранее описать глобальную переменную? Или мне просто игнорировать это предупреждение?
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 269 поощрить/наказать
Location: Питер
|
Posted: Thu Jul 17, 2008 11:12 am (спустя 16 минут; написано за 49 секунд)
Post subject:
|
|
Wild Pointer
Предупреждения (наконец-то) для того и нужны, чтобы решать что делать с такой переменной. А что именно с ней делвть - зависит от автора кода =)
|
|
Back to top |
|
 |
Wild Pointer
Заглянувший

Joined: 20 Feb 2008
Posts: 5
Карма: 0 поощрить/наказать
|
Posted: Thu Jul 17, 2008 11:26 am (спустя 14 минут; написано за 46 секунд)
Post subject:
|
|
А если позарез нужны глобальные переменные, то игнорировать предупреждение или нет?
|
|
Back to top |
|
 |
WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 269 поощрить/наказать
Location: Питер
|
Posted: Thu Jul 17, 2008 11:31 am (спустя 4 минуты; написано за 24 секунды)
Post subject:
|
|
Wild Pointer
Если позарез нужны глобальные переменные, то можно игнорировать и ошибки. =)
|
|
Back to top |
|
 |
KES
Участник форума

Joined: 19 Oct 2006
Posts: 214
Карма: 0 поощрить/наказать
Location: сВознесеновка, Мелитопольский р-н, Запорожская обл. Украина
|
Posted: Sat Nov 08, 2008 11:29 am (спустя 3 месяца 21 день 23 часа 57 минут; написано за 58 секунд)
Post subject:
|
|
Wild Pointer wrote: |
А если позарез нужны глобальные переменные, то игнорировать предупреждение или нет? | window['yourVariableName']= 'This is a global value'; аналогично: yourVariableName= 'This is a global value';
Last edited by KES on Sat Nov 08, 2008 3:35 pm; edited 1 time in total
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Sat Nov 08, 2008 12:38 pm (спустя 1 час 9 минут; написано за 2 минуты 58 секунд)
Post subject:
|
|
Кто и почему делает предупроеждения? На самом деле объявлять переменные без var соответсвует спецификации, хотя явно это не указывается в спецификации. Вопрос в другом. В какх случаях это допустимо делать. По-моему в очень оганиченных и контролируемых случаях. Когда идет инициализация действительно необходимых глобальных переменных внутри функции.
|
|
Back to top |
|
 |
Zeroglif
Участник форума
Joined: 02 Jan 2006
Posts: 293
Карма: 61 поощрить/наказать
|
Posted: Sat Nov 08, 2008 5:51 pm (спустя 5 часов 13 минут; написано за 1 минуту 50 секунд)
Post subject:
|
|
Anonymous wrote: |
На самом деле объявлять переменные без var соответствует спецификации, хотя явно это не указывается в спецификации. | Соответствует, но не указывается явно? В Netscape-овских спеках с самого начала говорилось: "to declare a global variable, declare the variable by assignment, that is simply assign the desired value...". С выходом же стандарта (ECMAScript) стало очевидно, что переменная объявляется только с помощью блатного словечка 'var', никаких тебе вариантов, никакого "declaration by assignment". Но спеки уже не поменялись, та же самая некорректно выраженная идея про "объявление через присваивание" продвигалась из версии в версию (и в JScript, и в JavaScript) в разной трактовке. Думаю, это делалось специально, чтобы не усложнять, не объяснять алгоритмы ES, писал об этом выше. В любом случае, это не объявление переменной в смысле ES, а создание нового свойства глобального объекта. Если знать, что все переменные (variables) - это свойства (properties), но не все свойства - это переменные, то ситуация будет понятна в любой трактовке... Anonymous wrote: |
Вопрос в другом. В каких случаях это допустимо делать. По-моему в очень ограниченных и контролируемых случаях. | Ещё бы знать эти случаи. ;)
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Sat Dec 27, 2008 5:24 pm (спустя 1 месяц 18 дней 23 часа 32 минуты)
Post subject:
|
|
|
|
Back to top |
|
 |
northernelevators
Заглянувший
Joined: 15 May 2015
Posts: 2
Карма: 0 поощрить/наказать
|
Posted: Fri May 15, 2015 10:52 am (спустя 6 лет 4 месяца 18 дней 17 часов 28 минут; написано за 3 минуты 37 секунд)
Post subject:
|
|
WingedFox wrote: |
AKS
Если придумаете термин для переменных, которые глобальны для N ф-ций, но локальны для одной, не входящей в эти N - предлагайте. На данный момент наиболее корректным определением я считаю "глобальная в fujihd.net". Локальная переменная - это переменная которая доступна в одной и только одной cnsuperpower.com. | it's so great
|
|
Back to top |
|
 |
|