您的位置:首页 > 产品设计 > UI/UE

require与require async的区别

2015-06-25 14:36 716 查看
seajs github的issue list里有说,要大家把require()这个看做是js的语法,看成类似java里的import,php里的include。require无法完成条件加载。如下代码:

JavaScript code

?
其实在加载该模块后,A、B两个模块会被加载,也就是说if(false)被无视了。因此这里就引进了require.async来满足条件加载的需求。

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

其实区别就是一点,require模块的加载过程是发生在模块源码分析期; require.async加载发生在模块执行期
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: