Seajs中的传入参数require为什么不能改名 Seajs的require本质

作为函数的传入参数,名字当然是可以修改的,比如Seajs中的function(require, exports, module),require理应可以改名成r/req等等,但改名之后你会发现函数体中所require的模块没有被加载,为什么?

seajs
究其原因还要跟踪一下Seajs的源码,原来Seajs在define函数中如果没有发现定义dependencies,则将回调函数作为字串进行了解析,用正则表达式解析出了将要require的模块,然后逐一进行了加载,直到加载完所有依赖模块后才执行回调函数,而实际运行require时,require本身的执行动作只是在内存中找到define中定义的函数,将其执行。如果define中定义了dependencies,那么请务必确保回调函数中require的模块都在dependencies中定义了,否则require的结果只能是null。这与Nodejs中的机制是不同的,毕竟是前端语言,必须要使用这样的类似于预处理的方式解决script文件异步加载的问题,想必这就是Seajs的核心思想吧。所以建议define函数只传入一个回调函数就好了,让Seajs帮忙检查dependencies,免得产生诡异效果。那么define回调函数中的另外两个参数exports和module能被改名吗?放心改吧。

发表评论

电子邮件地址不会被公开。

CAPTCHA image
*