因为requirejs的全局模块特性,即模块载入后,在同一个页面应用中,模块对应的JS文件只会解释执行一次,所以我们可以将某一个require模块用作全局变量,用于所有的require模块共享。
代码如下:
// User.js文件只会被加载一次,也只会被解释执行一次
var yiifaa = {
username : 'yiifaa',
age : 20
};
yiifaa.age ++; // 年龄变为21,这行代码也只会执行一次
define([], function() {
return yiifaa;
});
需要反复强调的是,requirejs引入的模块只会执行一次,无论是define函数之内的代码,还是define函数之外的代码。
引用测试的代码如下所示:
// 避免浏览器缓存,但也只会发送一次JS请求
require.config({
urlArgs: "r=" + (new Date()).getTime()
});
// 模块引入,对其进行设值
require(['User'], function(yiifaa) {
yiifaa.username = 'yiifee';
yiifaa.age = 35;
});
setTimeout(function() {
// 再次请求数据
require(['User'], function(yiifaa) {
// 输出yiifee:35
alert(yiifaa.username + ":" + yiifaa.age)
});
}, 5000);
需要特别指出的是,避免浏览器缓存可能会产生一个开发与调试的副作用,页面的调试断点难以保留(浏览器刷新后,断点消失)。