Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2016, 22:29
Интересующийся
Отправить личное сообщение для FeelUs Посмотреть профиль Найти все сообщения от FeelUs
 
Регистрация: 09.01.2016
Сообщений: 23

доступ к lexical environment функции
Добрый день, хочу получить доступ к к lexical environment функции, чтобы создавать там переменные
Например так:
function f() {
    var local_global = f.lexicalEnvironment; // lexical environment этой функции
    function set_var(name,value) {
        local_global[name] = value;
        exports[name] = value;
    }
    set_var('x',5)
    console.log(x)//5
}
f();
console.log(exports.x)//5


или , если это невозможно, такой вопрос: как сделать следующую конструкцию короче, чтобы не надо было name писать 3 раза:
functiuon f() {
    var name = something; // чтобы для доступа к name можно было использовать name а не exports.name
    exports.name = name;
}
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2016, 02:22
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

Это невозможно, возможно только переопределять их таким образом. Чтобы что то создавать в лексическом окружении, ты должен иметь к нему прямой доступ, это называется первоклассные окружения. Этого нет в большинстве яп. Но ты можешь воспользоваться bind, которая привяжет любой объект к твоей функции, это будет аналогом лексического окружения.
environment = {}
fu = function(arg){alert(this[arg])}.bind(environment)

environment.a = 100
fu("a")
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2016, 11:49
Интересующийся
Отправить личное сообщение для FeelUs Посмотреть профиль Найти все сообщения от FeelUs
 
Регистрация: 09.01.2016
Сообщений: 23

bind привязывает объект к this моей функции, и для доступа к нему в функции я должен буду писать this.name, а не просто name, а я же хочу привязать объект к lexical environment

по идее lexical environment создается при каждом вызове функции и существует до тех пор, пока существуют функции, которые на него замыкаются (или до выхода из функции)

эх были бы макросы в js...
все-таки lisp чуть чуть мощнее...
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2016, 16:03
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

тебе что, 4 буквы написать трудно? Ты просто мозги ебешь, по-ходу, хочу без this, это детский сад какой-то. Тебе шашечки или ехать?

Сообщение от FeelUs
эх были бы макросы в js...
все-таки lisp чуть чуть мощнее...
все это мифотворчество лисперов. Макросы -- это говно, от них Ъ-лисперы сами нос воротят. Были раньше в лиспах fexpr'ы, это мощная фича от них все ООП пошло изначально, это были, по сути дела объекты. А макросы сраные можно в любом ЯП реализовать, это обычные шаблоны, пиши препроцессор и будут тебе макросы, делов то.
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2016, 16:10
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

Сообщение от Rise
Покажи как ты это делаешь на lisp...
Да никак он не сделает это на лисп, если не брать напрочь маргинальные диалекты, там окружения точно так же анально скрыты как и в жс. Просто пришло очередное школоло чтобы поведать миру о своей элитарности.
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2016, 16:15
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

Сообщение от FeelUs
создается при каждом вызове функции
Кстати, не при каждом вызове, а при создании ф-ции
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Про Lexical Environment Иваннн Общие вопросы Javascript 0 17.01.2014 15:14
Добавление функции внутрь другой функции Lion_astana jQuery 9 28.12.2013 14:33
Доступ к функции из другого js файла sitesv Events/DOM/Window 3 29.04.2013 16:28
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21