【发布时间】:2011-07-20 23:26:19
【问题描述】:
我正在实现一个 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.js 中的代码被提取并动态执行时,moduleName 在什么上下文中执行?如果它在函数Module.require 的范围内,那么我可以很容易地参考args。如果它在全局范围内执行(window),那么我知道如何声明局部变量(匿名函数调用(function(){}());),但我如何传递参数?我希望有一种简单的方法可以做到这一点,因为我不希望将所有参数都传递给服务器。通过 PHP 不仅难以解析它们,而且代码中可能存在许多参数。
编辑:James Khoury 提到了我如何使用f.apply() 和f.call() 来传递参数,所以我现在需要知道的是脚本在执行时加载的上下文。如果它在函数的范围内,我想我可以这样称呼它f.call(this , args);。如果我能做到这一点,是否有调用匿名函数的方法?我问是因为我正在创建包装用户代码的模块,以确保用户声明的所有变量都保持在本地,因此,最好确保包装函数也不是全局的。
谢谢
【问题讨论】:
标签: javascript ajax dojo scope