Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   доступ к lexical environment функции (https://javascript.ru/forum/misc/64807-dostup-k-lexical-environment-funkcii.html)

FeelUs 06.09.2016 22:29

доступ к 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;
}

scrollquest 07.09.2016 02:22

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

environment.a = 100
fu("a")

FeelUs 07.09.2016 11:49

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

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

эх были бы макросы в js...
все-таки lisp чуть чуть мощнее...

scrollquest 07.09.2016 16:03

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

Цитата:

Сообщение от FeelUs
эх были бы макросы в js...
все-таки lisp чуть чуть мощнее...

все это мифотворчество лисперов. Макросы -- это говно, от них Ъ-лисперы сами нос воротят. Были раньше в лиспах fexpr'ы, это мощная фича от них все ООП пошло изначально, это были, по сути дела объекты. А макросы сраные можно в любом ЯП реализовать, это обычные шаблоны, пиши препроцессор и будут тебе макросы, делов то.

Rise 07.09.2016 16:03

Цитата:

Сообщение от FeelUs (Сообщение 427901)
я должен буду писать this.name, а не просто name, а я же хочу привязать объект к lexical environment

Покажи как ты это делаешь на lisp...

scrollquest 07.09.2016 16:10

Цитата:

Сообщение от Rise
Покажи как ты это делаешь на lisp...

Да никак он не сделает это на лисп, если не брать напрочь маргинальные диалекты, там окружения точно так же анально скрыты как и в жс. Просто пришло очередное школоло чтобы поведать миру о своей элитарности.

scrollquest 07.09.2016 16:15

Цитата:

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

Кстати, не при каждом вызове, а при создании ф-ции

Rise 07.09.2016 18:00

scrollquest, да, похоже очередной клоун...


Часовой пояс GMT +3, время: 17:18.