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加载发生在模块执行期。
JavaScript code
?
没仔细读过玉伯大神的源码,但是猜测在define一个模块的时候,seajs肯定是调用了该匿名funtion的toString方法,也就是得到我们定义的模块的静态源码,然后分析其中的require语句(就是字符串分析喽),得到其所依赖的模块,然后把这些模块统统加载了,再执行当前模块,得到模块的module对象和exports并加以缓存。这就解释了为什么require的参数必须写成原始字符串了。这种预处理的方式,使得require看上去像同步加载,实则事先把所有依赖的模块都已经准备好了。require.async自然没有这个语法限制,但是由于模块加载是异步过程,因此后续的逻辑代码只能写在回调函数内部。
其实区别就是一点,require模块的加载过程是发生在模块源码分析期; require.async加载发生在模块执行期。
相关文章推荐
- Google+ 团队的 Android UI 测试
- UI界面库
- EasyUI回车提交表单
- require.js模块化管理和加载js(按需加载)简单实例教学
- HackerRank - "Xor subsequence"
- 关于easyui datebox的记录
- Android有关Volley使用(十)至Request和Reponse意识
- Adobe Flash Builder 4 注册码破解方法
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- androidUI抽屉效果菜单---代码
- UITableView的registerClass forCellReuseIdentifier用法详解
- (android)system ui 内存优化
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- Unique Paths II ——LeetCode
- Unique Paths ——LeetCode
- NGUI中动画的代码使用
- iOS开发UI高级—06使用storyboard创建导航控制器以及控制器的生命周期
- An internal error occurred during: "Add Deployment". Invalid Subscription Level - Discontinuing this
- StringBuilder
- UI设计: