require与require async的区别

seajs github的issue list里有说,要大家把require()这个看做是js的语法,看成类似java里的import,php里的include。require无法完成条件加载。如下代码:
JavaScript code
?
1
2
3
4
5
6
7
define( function (require){
     if ( false ) {
         require( "module-A" );
     else  {
         require( "module-B" );
     }
});
其实在加载该模块后,A、B两个模块会被加载,也就是说if(false)被无视了。因此这里就引进了require.async来满足条件加载的需求。

没仔细读过玉伯大神的源码,但是猜测在define一个模块的时候,seajs肯定是调用了该匿名funtion的toString方法,也就是得到我们定义的模块的静态源码,然后分析其中的require语句(就是字符串分析喽),得到其所依赖的模块,然后把这些模块统统加载了,再执行当前模块,得到模块的module对象和exports并加以缓存。这就解释了为什么require的参数 必须写成原始字符串 了。这种预处理的方式,使得require看上去像同步加载,实则事先把所有依赖的模块都已经准备好了。require.async自然没有这个语法限制,但是由于模块加载是异步过程,因此后续的逻辑代码只能写在回调函数内部。

其实区别就是一点,require模块的加载过程是发生在模块源码分析期; require.async加载发生在模块执行期
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值