Javascript-使用createElement调用js文件时无法识别函数

Javascript-使用createElement调用js文件时无法识别函数,javascript,Javascript,我有这样的编码: <script language="javascript" src="test.js"></script> <script language="javascript"> mp.init({ app_id : 'hd32y4328r3meh2423em', version : '1.0' }); </script> 但是mp.init函数()在我使用createElement加载test.js

我有这样的编码:

<script language="javascript" src="test.js"></script>
<script language="javascript">

    mp.init({
    app_id  : 'hd32y4328r3meh2423em',
    version : '1.0'
    });

</script>
但是mp.init函数()在我使用createElement加载test.js时无法识别它,如下所示:

<script language="javascript">
    // Load the JS asynchronously       
    (function() {
        var s = document.createElement('script');
        s.type = 'text/javascript'; s.src = 'mpsdk.js';
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    })();


    // We have a simple cars object     
    mp.init({
    app_id  : 'hd32y4328r3meh2423em',
    version : '1.0'
    });

</script>

//异步加载JS
(功能(){
var s=document.createElement('script');
s、 type='text/javascript';s.src='mpsdk.js';
var x=document.getElementsByTagName('script')[0];
x、 parentNode.insertBefore(s,x);
})();
//我们有一个简单的汽车对象
mp.init({
应用程序id:'hd32y4328r3meh2423em',
版本:“1.0”
});

任何人都可以提供帮助?

这是因为您同步执行代码,而脚本是异步加载的。因此,当您调用
mp.init
时,脚本尚未加载

您必须监听
load
事件(对于IE9+和标准浏览器)或
readystatechange
事件(对于IE8-)检查
readyState==“complete”
,然后调用
mp.init


但是我建议您在加载脚本后使用众多AMD加载程序(RequireJS、curl等)中的一个,甚至jQuery的
$.getScript

调用函数,以省去所有的麻烦

试试这个-

function() {
        var s = document.createElement('script');
        s.type = 'text/javascript'; s.src = 'mpsdk.js';
        s.addEventListener('load', function(){
        //script loaded do stuff here
         // We have a simple cars object     
         mp.init({
         app_id  : 'hd32y4328r3meh2423em',
         version : '1.0'
         });
        });
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    })();
或 在加载时使用回调函数。

     var onLoadScript = function(callback) {
        var s = document.createElement('script');
        s.type = 'text/javascript'; s.src = 'mpsdk.js';
        s.addEventListener('load',callback);//callback on load

        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
     };
onLoadScript(function(e){
        //script loaded do stuff here
         // We have a simple cars object     
         mp.init({
         app_id  : 'hd32y4328r3meh2423em',
         version : '1.0'
         });
};

DOM元素插入未被阻止。脚本的其余部分将运行,然后将加载mpsdk.js。您需要等待js文件加载。在加载/评估
mpsdk.js
之前调用
mp.init
。当建议编写加载程序而不是使用现有加载程序时,您可能应该提到存在各种问题,例如旧IE(低于10)
     var onLoadScript = function(callback) {
        var s = document.createElement('script');
        s.type = 'text/javascript'; s.src = 'mpsdk.js';
        s.addEventListener('load',callback);//callback on load

        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
     };
onLoadScript(function(e){
        //script loaded do stuff here
         // We have a simple cars object     
         mp.init({
         app_id  : 'hd32y4328r3meh2423em',
         version : '1.0'
         });
};