доступ к 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, время: 04:59. |