Javascript 在扩展jQuery之前加载外部资源

Javascript 在扩展jQuery之前加载外部资源,javascript,jquery,Javascript,Jquery,请考虑下面的脚本(也在)。如果在包含google maps链接之前尝试创建变量map,我会得到一个ReferenceError:google未定义错误。如果不在脚本之前移动链接,是否可以消除此错误?即使答案是“不”,我也希望能解释一下发生了什么 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-

请考虑下面的脚本(也在)。如果在包含google maps链接之前尝试创建变量
map
,我会得到一个
ReferenceError:google未定义
错误。如果不在脚本之前移动链接,是否可以消除此错误?即使答案是“不”,我也希望能解释一下发生了什么

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Testing</title>  
        <link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/ui-lightness/jquery-ui.css" type="text/css" rel="stylesheet" />
        <style type="text/css">
        </style> 
    </head>
    <body>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.js" type="text/javascript"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.js" type="text/javascript"></script>
        <!-- <script type="text/javascript" src="//maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false&amp;libraries=places"></script> -->
        <script>
            (function($){
                var map = new google.maps.LatLng(47.64864, -122.348927);
                }(jQuery));
        </script>
        <script type="text/javascript" src="//maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false&amp;libraries=places"></script>
    </body> 
</html> 

测试
(函数($){
VarMap=newGoogle.maps.LatLng(47.64864,-122.348927);
}(jQuery));

也许可以尝试此方法,直到页面加载完毕,如果需要google一段时间才能加载,则会重试:

var map;
function makeMap() {
  if (google && google.maps) { // google loaded?
    map = new google.maps.LatLng(47.64864, -122.348927);
    return;
  }
  setTimeout(makeMap,200); // try again
}
$(function(){ // on page load instead of Immediately-Invoked Function Expression (IIFE)
   makeMap();         
});

您试图在google名称空间中调用一个名为maps的方法,该名称空间是在您的注释脚本中定义的。解决方案是使用jQuery.ready方法在加载页面时执行代码(包括页面底部包含的脚本)。将您的功能包装在这一部分中,您就可以开始了:

$( document ).ready(function() {
    var map = new google.maps.LatLng(47.64864, -122.348927);
});
有关ready的更多信息,请查看始终有用的jQuery API:

谢谢漂浮眼。我认为
$(document.ready(function(){…})的目的是什么DOM已加载。不虽然它看起来很有效,但我没有料到会这样做。您完全正确,但该元素实际上是一个dom元素。因此,它将加载所有内容,包括脚本,然后执行您的代码。很高兴我能帮忙。