是否存在在调用所需函数时触发的惰性javascript下载/解释?

是否存在在调用所需函数时触发的惰性javascript下载/解释?,javascript,Javascript,假设我有两个单独的JavaScript块,脚本A和脚本B。在脚本B中,我从脚本A调用函数A,但脚本A尚未下载和/或解释。库应该解析依赖关系(使用表或其他东西),触发对的解释,然后执行所需的函数调用 这有时可能有用(我知道,通常不会) 我已经阅读并了解了,但他们似乎没有完成我想要的依赖项解析工作。他们要求编写符合其模式的JS,但选项包括: 我不确定这是否是您想要的,但LABjs是一个脚本加载程序,可以完成您想要的,这是文档中的一个快速示例 <script> $LAB

假设我有两个单独的JavaScript块,脚本A和脚本B。在脚本B中,我从脚本A调用函数A,但脚本A尚未下载和/或解释。库应该解析依赖关系(使用表或其他东西),触发对的解释,然后执行所需的函数调用

这有时可能有用(我知道,通常不会)


我已经阅读并了解了,但他们似乎没有完成我想要的依赖项解析工作。

他们要求编写符合其模式的JS,但选项包括:


我不确定这是否是您想要的,但LABjs是一个脚本加载程序,可以完成您想要的,这是文档中的一个快速示例

<script>
   $LAB
   .script("framework.js").wait()
   .script("plugin.framework.js")
   .script("myplugin.framework.js").wait()
   .script("init.js").wait();
</script>

$LAB
.script(“framework.js”).wait()
.script(“plugin.framework.js”)
.script(“myplugin.framework.js”).wait()
.script(“init.js”).wait();
它将允许您加载文件,但不执行它们,因此您可以等待相关性也被加载。希望这是有道理的。

您可以通过包含包含下载脚本逻辑的虚拟函数来实现:

function funcA(parameter) {
  var source = loadSynchronousAjax( 'url for script A' ); // whatever function you usually use to load data synchronously
  eval( source ); // this will replace the funcA symbol with the proper implementation 
  return funcA( parameter );
}
您必须自己定义依赖项,但解决方案应该自行处理。如果funcA(实函数)使用另一个伪函数,它将以相同的方式加载

提取通用代码:

function lazyFunction( obj, url, name ) {
  obj[name] = function () {
    var source = loadSynchronousAjax( url );
    eval( source ); 
    return obj[name].apply( obj, arguments );  
  };
}

lazyFunction( window, 'url for script A', 'funcA' );
lazyFunction( window, 'url for script B', 'funcB' );
lazyFunction( window, 'url for script B', 'funcC' );
这将定义两个脚本,其中包含三个延迟加载的函数

我应该补充一点,我认为同步加载脚本不是一个好主意,但是如果惰性函数看起来像普通函数,那么就没有太多选择了


如果您可以将惰性函数的签名更改为异步调用,这实际上可能是一种值得采用的模式。

因此您希望捕获何时调用了未定义的函数,并且在这种情况下,暂停调用方的执行,加载定义函数的脚本,然后恢复执行?@MattiVirkkunen。你可能想编辑我的问题以提高清晰度。我想这不是我想要的。我希望只有在代码中的某个点确实需要依赖项时,才开始执行并加载依赖项。那肯定需要用钩子什么的。是的,我的答案不行。我可以问一下为什么只在需要脚本时才加载它们吗?因为我可能只在各种罕见的用例中才需要它们。每次加载它们都会比我真正需要它们时偶尔发生的等待更痛苦。