假设我在文件中有一个函数:
foo.js:
(function(){
return {
loadStuff: function(callback){
setTimeout(function() { callback() }, 2000)
}
}
})()
我必须以两种不同的方式运行loadStuff
:
首先:当我通过 JavaScript 引擎本身加载文件时(假设通过 XHR 和
eval
),然后我可以调用它传递回调(这已经是可能的)第二:当它加载到脚本标签中时,它仍然应该自动调用
loadStuff
,尽管这次没有回调
我应该如何更改代码以使loadStuff
双向工作?不过我不想调用loadStuff
两次:所以对于第一种情况,我想用回调来调用它,而不是像第一次加载函数(没有回调)然后再次调用它一样。我只需要它运行一次loadStuff
,带有回调。
所以。
<script src='foo.js' />
时,它应该自动调用loadStuff
当函数是字符串并且我这样做时:
fn = eval(fnStr) fn.loadStuff(function(){ console.log("stuff loaded") })
它应该只调用loadStuff
一次
尝试
foo.js:
(function(){
var called = false,
loadStuff = function(callback){
called = true;
setTimeout(function() { callback && callback() }, 2000)
};
setTimeout(function(){!called && loadStuff();}, 13); //autolaunch if needed
return {
loadStuff: loadStuff
}
})()