Я реализую функцию require / load, которая извлекает и выполняет удаленный фрагмент кода JavaScript. Он работает нормально, и я использую обходной путь, чтобы дать ему аргументы, в основном объявляя глобальные переменные, но я хотел знать, как лучше всего передать аргументы в этой ситуации. Вот функция, которая загружает удаленный скрипт
Module.require = function (moduleName , args){
if (! Module.has(moduleName)){
dojo.xhrGet({
url: 'module.require.php',
handleAs: "javascript",
content : {
module : moduleName
},
load: function() {
},
error: function(errorMessage) {
console.log('there was an error with Module.require()');
console.error(errorMessage);
}
});
}
};
Мой первый вопрос: в каком контексте выполняется moduleName
, когда код, сохраненный в moduleName.js
, выбирается и выполняется динамически? Если это входит в область действия функции Module.require
, то я легко могу сослаться на args
. Если он выполняется в глобальной области видимости (window
), тогда я знаю, как объявлять локальные переменные (анонимный вызов функции (function(){}());
), но как передать аргументы? Я надеюсь, что есть простой способ сделать это, так как я не хочу передавать все аргументы на сервер. Не только трудно разобрать их через PHP, но и в коде может быть много аргументов.
РЕДАКТИРОВАТЬ : Джеймс Хури упомянул, как я могу использовать f.apply()
и f.call()
для передачи аргументов, поэтому сейчас мне нужно знать, в каком контексте скрипт загружается при выполнении. Если это входит в сферу действия функции, я полагаю, что могу назвать ее так: f.call(this , args);
. И если я могу сделать это, в любом случае, чтобы вызвать анонимную функцию? Я спрашиваю, потому что я создаю модули, которые обертывают код пользователя, чтобы гарантировать, что все переменные, которые пользователь объявляет, остаются локальными, поэтому было бы лучше убедиться, что функция-обертка также не является глобальной.
Спасибо