我认为我对JS的范围或引用有点误解。
我使用Leaflet发起新的地图对象。我的代码是这样的:
var revealing = (function() {
var mapEl = "#map";
var mapName = "map";
var mapboxMap = '----';
var map;
var init = function() {
map = L.mapbox.map(mapName, mapboxMap);
map.setView([40, -100], 5);
}
return {
"init": init
}
}());
如果我参考' map'在init函数中,我得到了我想要的东西。但是在我引用map的任何其他地方(在函数内或其他地方通过'揭示'对象,我得到了leafleft(L.mapbox ...)创建的html对象的引用,而不是实例化的对象我进入init()。
非常感谢任何帮助。
答案 0 :(得分:0)
您没有显示遇到问题的代码(例如,访问map
而没有得到您期望的内容),但我怀疑问题不是范围,而是时间
在您的大型匿名函数中,map
将解析为您在该函数中声明的map
变量。但是该变量的值为undefined
,直到init
将其设置为某个值。此时,它具有init
赋予它的值。
此示例中的更多内容:
var revealing = (function() {
var mapEl = "#map";
var mapName = "map";
var mapboxMap = '----';
var map;
var init = function() {
map = L.mapbox.map(mapName, mapboxMap);
map.setView([40, -100], 5);
}
var useMap = function() {
console.log(map); // <============== 1 - See 3 and 4 below
};
console.log(map); // <============== 2 - Shows "undefined"
return {
"init": init,
"useMap": useMap
}
}());
revealing.useMap(); // <============== 3 - Shows "undefined"
revealing.init();
revealing.useMap(); // <============== 4 - Shows the map created in `init`