有人可以解释一下jQuery getScript()函数的行为吗?

考虑一个JavaScript文件test.js

var tmp = 'a variable';
alert('here');


当通过html的test.js标记加载<script>时,一切工作正常:tmp变量在全局范围内可用,并出现一个消息框。

我正在尝试通过以下代码获得类似的行为:

<script>
$(document).ready(function() {
    $.getScript("static/js/proto/test.js");

    setTimeout(function() {
        // at this point tmp should be available
        // in the global scope
        alert(tmp);

    } , 2000); // 2 seconds timeout
}
</script>


但是浏览器的错误控制台报告“未定义的变量tmp”错误。
我究竟做错了什么?
谢谢。

最佳答案

$ .getScript可能是异步的,请使用callback参数:

$.getScript("static/js/proto/test.js", function() {
    // here you are sure that the script has been executed
});


请参阅$ .getScript的文档:http://api.jquery.com/jQuery.getScript

10-08 11:47