Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 29.06.2014, 23:14
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Sweet,
Я думаю, не совсем так.
foo="bar" // объявляем свойство глобального объекта 
var foo // объявляем переменную, в которую копируется значение свойства глобального объекта
delete foo // пытаемся удалять переменную - false, и вместе с этим удаляется св-во в глобале
console.log(global.foo)// это не имеет никакого отношения к переменной, и кроме того, мы это свойство удалили
console.log(foo)// bar - ибо почему бы и нет = так оно и должно быть.

Последний раз редактировалось foo, 29.06.2014 в 23:18.
Ответить с цитированием
  #22 (permalink)  
Старый 29.06.2014, 23:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Сообщение от foo Посмотреть сообщение
Дайте линк
Хмм, быстро не нашёл, но точно помню что когда-то давно об этом читал здесь. Читайте весь учебник - не пропустите.)

А по вопросу: объявления var происходят в начале функции независимо от того где они указанны в коде.
Т.е.
alert(a);
var a = 123;
это на самом деле
var a;
alert(a);
a = 123;


Соответственно и в васшем примере:
foo="bar" // foo уже локально ибо ниже объявлена через var
var foo //объявляем переменную
delete foo //удаление несуществующего
console.log(global.foo) //undefined(было таким и до delete)
console.log(foo) //bar
__________________
29375, 35

Последний раз редактировалось Aetae, 29.06.2014 в 23:28.
Ответить с цитированием
  #23 (permalink)  
Старый 29.06.2014, 23:27
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от foo
Я думаю
А я не думаю, я - знаю. Можешь проверить. Объяви в одном модуле:
global.foo = "value";

А затем в другом:
console.log(foo); // undefined - это значение переменной
foo="bar" // присваеваем переменной
var foo // объявляем переменную
delete foo // пытаемся удалять переменную - false
console.log(global.foo)// value, потому что глобальное свойство мы не трогали
console.log(foo)// bar
Ответить с цитированием
  #24 (permalink)  
Старый 29.06.2014, 23:34
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Aetae
было таким и до delete
В вашей схеме все правильно с виду, но моя точней отражает суть происходящего. Тут, насколько я понял, дело в том, что транслятор проходит текст проги за 2 раза. В первом проходе, он делает подстановку во все вары. В браузерах на этом все и заканчивается. А в ноде он вместе с подстановкой удаляет соответствующие св-ва глобала.
Ответить с цитированием
  #25 (permalink)  
Старый 29.06.2014, 23:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

*facepalm.jpg*
foo
__________________
29375, 35
Ответить с цитированием
  #26 (permalink)  
Старый 29.06.2014, 23:38
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Sweet
модуле
Я не хочу сейчас модули обсуждать, это прямого отношения к делу не имеет. Косвенное отношение в том, что это уродство сделали именно для подключения модулей, да, чтобы из них не попадало ненужное в глобал. То есть, кривая реализация из-за которой пришлось патчить язык. Поведение стало еще менее очевидным чем было. Т.е. кривизна модульности.

А что касаемо реально происходящего, см выше.
Ответить с цитированием
  #27 (permalink)  
Старый 29.06.2014, 23:54
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Aetae
facepalm.jpg
Подумай над этим, раз такой умный
global.a=eval("1")
var a
a//undefined
Ответить с цитированием
  #28 (permalink)  
Старый 29.06.2014, 23:55
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от foo
Я не хочу сейчас модули обсуждать, это прямого отношения к делу не имеет.
Просто запусти на ноде такой код:
console.log(arguments);
И прозрей: в ноде весь код оборачивается в функцию! Там нет кода, исполняющего в глобальном окружении.
Всё остальное - это просто бредни человека, который толком ничего не знает и не имеет опыта, но бредит какой-то хренотенью, типа "я самый умный, я понял, что var в глобале не нужен". Но
Сообщение от foo
что касаемо реально происходящего
, ты ничего не понимаешь.
Ответить с цитированием
  #29 (permalink)  
Старый 30.06.2014, 00:03
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от foo
Подумай над этим, раз такой умный
Я уже объяснил, почему оно так. Потому что в ноде этот код исполняется так:
var global = window;

var program = 'global.a=eval("1");\
var a;\
alert(a); //undefined';

Function("exports, module, __filename, __dirname", program)(/*arguments*/);
Ответить с цитированием
  #30 (permalink)  
Старый 30.06.2014, 00:04
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Sweet
Там нет кода, исполняющего в глобальном окружении.
Да? A это что?
a=1
console.log(a)

И что ты вообще называешь глобальным окружением? То глобальное (с var) что внутри модуля -- есть глобальное для этого модуля, как, впрочем и для функции. Ты не понимаешь, что такое глобальное окружение. Есть глобальный объект и есть глобальное окружение, в JS это не одно и тоже.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции Hol1killer Prototype & script.aculo.us 11 05.12.2016 01:37
jQuery научите пользоваться. Станислав89 Общие вопросы Javascript 10 19.12.2013 23:01
Помогите разобраться ŞΘLƉiΞR Общие вопросы Javascript 2 28.08.2012 11:57
регулярки: замена ссылки на ютуб Hekumok Общие вопросы Javascript 105 01.08.2012 10:48
Свойства посредством полиморфных функций tenshi Ваши сайты и скрипты 0 18.03.2010 17:12