Javascript 具有异步操作的函数,该操作可用于脚本标记并作为独立操作

Javascript 具有异步操作的函数,该操作可用于脚本标记并作为独立操作,javascript,Javascript,假设我在一个文件中有一个函数: foo.js: (function(){ return { loadStuff: function(callback){ setTimeout(function() { callback() }, 2000) } } })() 我必须以两种不同的方式运行loadStuff: 首先:当我得到javascript引擎本身加载的文件时(比如通过XHR和eval),我可以通过回调调用它(这已经是可能的) 第二

假设我在一个文件中有一个函数:

foo.js:

(function(){
   return {
      loadStuff: function(callback){
         setTimeout(function() { callback() }, 2000) 
      }
   }

})()
我必须以两种不同的方式运行
loadStuff

  • 首先:当我得到javascript引擎本身加载的文件时(比如通过XHR和
    eval
    ),我可以通过回调调用它(这已经是可能的)

  • 第二:当它加载到脚本标记中时,它仍然应该自动调用
    loadStuff
    ,尽管这次没有回调

如何更改代码以使
loadStuff
双向工作?但是我不想调用两次
loadStuff
:因此,对于第一种情况,我希望使用callback调用它,而不是在第一次加载函数(不使用callback)然后再次使用callback调用它。我只需要它运行一次
loadStuff
,并进行回调

所以

  • 时,它应该自动调用
    loadStuff
  • 当函数为string时,我执行以下操作:

    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
   }

})()

所以基本上你是说你想叫它两次而不是叫它两次。。。我不明白。