官方文档说,require用来获取指定模块的接口,require.async用来加载模块。这两种描述有什么区别?SeaJSjavascript
解决方案 »
- 找一个Jquery 分页 插件
- 如何用EL表达式,把服务端的list转换成js的array形式?
- 求一个正则表达式,关于替换问题
- 请推荐账本经典的JavaScript的好书,散60分!
- javascript生成动态表格
- javacript postmessage
- 如何隐藏表的某一列.
- 怎样实现过一小短时间网页自动关闭跳转其他页面呢?
- 父窗口内有一下拉框,绑定记录集A,在该页内winopen新窗口,在新窗口内插入数据,如何
- 求此段代码的js写法,是控制一个div弹入弹出的
- autocomplete控件 实现tag(只输入Lucy)失去焦点时,做出响应(tagID的值变为1)
- jsp中做组织架构图如何实现横竖的切换??
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加载发生在模块执行期。