2013-06-02 2 views
2

Мне интересно, как я могу привязать переменные к функции закрытия. Позвольте мне использовать этот код:Переменные связывания закрытия в Javascript

Пожалуйста, смотрите код здесь:

function makeCall(callback) { 
var fs = callback.toString(); 
var stored_callback = eval('(' + fs + ')').bind({ }); 
stored_callback(); 
} 

function foo(id) { 
makeCall(function() { 
    console.log(id); 
}); 
} 
foo('bar'); 

После вызова Eval, вызываемая функция не может достичь идентификатора, как это должно как закрытие.

Вопрос в том, что перед вызовом toString можно каким-то образом получить «контекст» замыкания, которое нужно сохранить и извлечь и связать с вызовом?

+2

Я не совсем уверен, понимаю ли я. 'id' и' name' доступны функцией, которую вы передаете 'obj.do', так как она является закрытием, независимо от того, что означает 'this'. Что такое' callback' в 'callback.bind (bobInstance);'? Возможно, вам нужно предоставить лучший пример. –

+0

Вы правы, извините. Надеюсь, что это больше понятно. – user1018074

+0

Хорошо, я могу понять, что вы сейчас пытаетесь сказать, но я не вижу проблемы. См. здесь: http://jsfiddle.net/xRLNM/. Я связываю переданный в обратном вызове, но он все еще может получить доступ 'id'. Вы хотите« изменить »t значения 'id' и' name', когда вы привязываете обратный вызов к другому объекту? Возможно, вам придется предоставить демонстрацию http://jsfiddle.net/, чтобы показать актуальную проблему. –

ответ

1

Основываясь на ответе Феликса Кинга, это невозможно. :( Слишком плохо Я просто хотел сохранить вызовы и выполнить позже для какого-то уровня настойчивости. Таким образом, взаимодействие может быть выполнено, даже если компьютер перезагрузится или что-то еще ... Кажется, единственный способ - не использовать встроенный параметры из «закрытия», да? Спасибо, в любом случае!

Смежные вопросы