Я пытаюсь выполнить функцию в другой области, чем там, где она определена. Мне нужно получить переменные, доступные в области выполнения, доступной для контекста функций.Достижение динамического охвата в JavaScript
Образец кода может быть как
var k = function() { alert(x); };
(function() {
var x = 100;
k();
})();
Ее невозможно для функции к х, чтобы получить доступ, который находится в объеме, где она выполняется.
Возможные работы обходные, что у меня есть следующие:
- инъекционные х в качестве параметра для работы
использование Eval как
var k = "function() { alert(x); }"; (function() { var x = 100; var m = eval("("+k+")");//prints 100 m(); })(); //But this same work around wont work if I use k = "alert(x);" and //define m = new Function(k);
связывают х как
this
контекст для функции и сделатьalert(this)
.
Если я исключаю вышеуказанные 3 варианта, есть ли другие способы решения этой проблемы? Есть ли способ, которым я могу вставлять переменные в область функций во время выполнения, точно так же, как call
, apply
и bind
делает для this
?
Нет, если вы хотите, чтобы переменные были доступны в функции, вы передаете их в качестве аргументов. – adeneo
Можете ли вы объяснить, в чем проблема, которую вы действительно пытаетесь решить, поскольку принятие «x» в качестве аргумента является очевидным решением здесь? – jfriend00
@ jfriend00: Я пытаюсь написать библиотеку, где пользователь сможет писать функции для определения потока. Внутри функций он может использовать некоторые частные функции, поддерживаемые библиотекой. Может быть, как 'stop()', 'rework()' и т. Д. Передача их в качестве аргументов кажется хорошим в этой точке. – mithunsatheesh