Javascript jQuery—内部函数(函数($){//code}(jQuery));

Javascript jQuery—内部函数(函数($){//code}(jQuery));,javascript,jquery,wordpress,Javascript,Jquery,Wordpress,我有一个创建谷歌地图的功能,以及一些其他逻辑来创建标记、信息窗口,并允许一些用户交互来控制地图 在使用jQuery和WordPress时,默认情况下,$函数为兼容而被禁用 为了克服这个问题,我将所有JavaScript代码封装在以下代码块中: (function ($) { function initMap() { console.log("Initmap start"); map = new google.maps.Map(document.getElementById("dealer-ma

我有一个创建谷歌地图的功能,以及一些其他逻辑来创建标记、信息窗口,并允许一些用户交互来控制地图

在使用jQuery和WordPress时,默认情况下,$函数为兼容而被禁用

为了克服这个问题,我将所有JavaScript代码封装在以下代码块中:

(function ($) {

function initMap() {
console.log("Initmap start");
map = new google.maps.Map(document.getElementById("dealer-map"), {
    center: new google.maps.LatLng(54.583408, -4.125605),
    zoom: 5
});
setMarkers(map);
}

//...other code

}(jQuery));
(很抱歉,我不确定上面的内容是什么,因此标题为)

Google Maps API代码中有一个函数回调,它调用
initMap()函数将立即运行,但这不起作用。我试图通过Chrome开发者控制台手动调用此功能,但收到:

ReferenceError:未定义initMap


这有什么办法吗?或者只启用$function会更容易吗?

每次使用
function
关键字时,您都在创建一个新的作用域。这适用于使用函数表达式或函数语句的情况

您需要在可以看到该函数的范围内使用该函数,或者必须将该函数导出到更公开的对象

我对wordpress了解不够,无法讨论如何做到这一点

函数范围1(){
//这个范围是私有的
函数private(){
}
}
函数scope2(){
//这是一个完全不同的范围,不能
//查看范围1内的任何内容。
函数private(){
}

}
每次使用
函数
关键字时,您都在创建一个新范围。这适用于使用函数表达式或函数语句的情况

您需要在可以看到该函数的范围内使用该函数,或者必须将该函数导出到更公开的对象

我对wordpress了解不够,无法讨论如何做到这一点

函数范围1(){
//这个范围是私有的
函数private(){
}
}
函数scope2(){
//这是一个完全不同的范围,不能
//查看范围1内的任何内容。
函数private(){
}

}
以下是三种方法:

function initMap() {
  (function($) {
    /*...*/
  })(jQuery);
}


以下是三种方法:

function initMap() {
  (function($) {
    /*...*/
  })(jQuery);
}


您尝试过jQuery(“选择器”)吗?向我们展示一个在您提供的UMD代码中“不工作”的函数,但这会破坏wordpress的兼容性,直到代码执行后才可用。第一个代码段称为立即调用的函数表达式或简称IIFE。
initMap
是在IIFE中定义的,因此它将仅存在于该范围内。全局范围内、该IIFE之外的任何内容都将无法访问它。您尝试过jQuery(“选择器”)吗?向我们展示一个“不工作”的函数
窗口。$=$
在您提供的UMD代码中,但这会破坏wordpress的兼容性,直到代码执行后才可用。第一个代码段称为立即调用的函数表达式或简称IIFE。
initMap
是在IIFE中定义的,因此它将仅存在于该范围内。在全球范围内的任何东西,在那个生命之外,都将无法访问它。谢谢,第二种选择对我有效。很抱歉没有尽早给出答案!虽然这三个选项都可以使用,但重要的是
initMap
函数从外部是可见的。谢谢,第二个选项对我有效。很抱歉没有尽早给出答案!尽管这三种方法都可以使用,但重要的是
initMap
函数从外部是可见的。
function init($) {
  /*...*/
}

function initMap() {
  init(jQuery);
}