доступ к 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; } |
Это невозможно, возможно только переопределять их таким образом. Чтобы что то создавать в лексическом окружении, ты должен иметь к нему прямой доступ, это называется первоклассные окружения. Этого нет в большинстве яп. Но ты можешь воспользоваться bind, которая привяжет любой объект к твоей функции, это будет аналогом лексического окружения.
environment = {} fu = function(arg){alert(this[arg])}.bind(environment) environment.a = 100 fu("a") |
bind привязывает объект к this моей функции, и для доступа к нему в функции я должен буду писать this.name, а не просто name, а я же хочу привязать объект к lexical environment
по идее lexical environment создается при каждом вызове функции и существует до тех пор, пока существуют функции, которые на него замыкаются (или до выхода из функции) эх были бы макросы в js... все-таки lisp чуть чуть мощнее... |
тебе что, 4 буквы написать трудно? Ты просто мозги ебешь, по-ходу, хочу без this, это детский сад какой-то. Тебе шашечки или ехать?
Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 17:41. |