【发布时间】:2010-05-27 15:22:15
【问题描述】:
我正在使用一个函数来延迟加载Sizzle 选择器引擎(由 jQuery 使用):
var sizzle_loaded;
// load the Sizzle script
function load_sizzle(module_name) {
var script;
// load Sizzle script and set up 'onload' and 'onreadystatechange' event
// handlers to ensure that external script is loaded before dependent
// code is executed
script = document.createElement('script');
script.src = 'sizzle.min.js';
script.onload = function() {
sizzle_loaded = true;
gather_content(module_name);
};
script.onreadystatechange = function() {
if ((script.readyState === 'loaded' || script.readyState === 'complete') &&
!sizzle_loaded) {
sizzle_loaded = true;
gather_content(module_name);
}
};
// append script to the document
document.getElementsByTagName('head')[0].appendChild(script);
}
我设置了 onload 和 onreadystatechange 事件处理程序,以及 sizzle_loaded 标志,以便在 Sizzle 加载后立即调用另一个函数 (gather_content())。所有这些都需要以跨浏览器的方式进行。
到目前为止,我的项目只需要在脚本中的某一点延迟加载 Sizzle,因此我可以将 gather_content() 函数调用硬编码到 load_sizzle() 函数中。
但是,我现在需要在脚本中的两个不同点延迟加载 Sizzle,并在加载后调用不同的函数。我的第一直觉是修改函数以接受回调函数:
var sizzle_loaded;
// load the Sizzle script
function load_sizzle(module_name, callback) {
var script;
// load Sizzle script and set up 'onload' and 'onreadystatechange' event
// handlers to ensure that external script is loaded before dependent
// code is executed
script = document.createElement('script');
script.src = 'sizzle.min.js';
script.onload = function() {
sizzle_loaded = true;
callback(module_name);
};
script.onreadystatechange = function() {
if ((script.readyState === 'loaded' || script.readyState === 'complete') &&
!sizzle_loaded) {
sizzle_loaded = true;
callback(module_name);
}
};
// append script to the document
document.getElementsByTagName('head')[0].appendChild(script);
}
那么,我可以这样称呼它:
load_sizzle(module_name, gather_content);
但是,我需要使用的另一个回调函数比gather_content() 需要更多的参数。
如何修改我的函数,以便我可以指定可变数量的参数,以与回调函数一起传递?或者,我是不是走错了路?
最终,我只想加载 Sizzle,然后在加载完成后调用我需要的任何函数(使用它需要的任何参数)。
感谢您的帮助!
【问题讨论】:
标签: javascript function parameters callback arguments