0
我想使用RequireJS来加载jQuery(我开发的模块应该在jQuery可能已经初始化的非受控环境中工作),但是在需要不同版本的jQuery时会出现一些问题。结果是不可预测的。内部需要功能块jQuery版本是随机的。哪里不对? 这里是代码来说明问题: RequireJS不同的jQuery
<!DOCTYPE html>
<html>
<head>
<script data-main="scripts/main" src="http://ajax.cdnjs.com/ajax/libs/require.js/0.24.0/require.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
</head>
<body>
<script>
console.log(jQuery.fn.jquery);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},1000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},2000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
console.log($.fn.jquery);
});
},3000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},4000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},5000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},6000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},7000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
console.log($.fn.jquery);
});
},8000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},9000);
</script>
</body>
</html>
结果是:
1.6.2
1.8.0
1.4.4
1.8.0
1.8.0
1.6.2
1.6.2
1.6.2
1.6.2
1.6.2
我假设'需要()'函数是异步的?如果是这样,则不能保证您的console.log语句将按照它们写入的顺序执行。 – 2012-08-17 08:11:24
是的,require是异步的,但require的目的之一是在封闭函数内部封装了代码块,理论上每个require都应该包含作为第一个参数传递的jQuery版本。 – Alexander 2012-08-17 08:52:48