jQuery-内部函数(function($){//代码}(jQuery));

时间:2019-03-06 22:44:34

标签: javascript jquery wordpress

我具有创建Google Map的功能以及创建标记,信息窗口并允许一些用户交互操作来控制地图的其他逻辑。

在使用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代码中会有一个函数回调,一旦API加载,该函数便会调用initMap();函数,但这是行不通的。我尝试通过Chrome开发者控制台手动调用此操作,但收到以下消息:

  

ReferenceError:未定义initMap

有什么办法解决吗?还是仅启用$功能会更容易?

2 个答案:

答案 0 :(得分:0)

每次使用function关键字时,您都在创建一个新的作用域。如果您使用的是函数表达式或函数语句,则适用。

您将需要在可以看到它的范围内使用该功能,否则您必须导出该功能以公开使用。

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

function scope1() {
  // This scope is private
  function private() {
  }
}

function scope2() {
  // This is a whole different scope that cannot
  // see anything inside of scope 1.
  function private() {
  }
}

答案 1 :(得分:0)

这是三种方法:

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

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

function init($) {
  /*...*/
}

function initMap() {
  init(jQuery);
}