Javascript JS模块模式范围/引用

Javascript JS模块模式范围/引用,javascript,reference,leaflet,mapbox,Javascript,Reference,Leaflet,Mapbox,我想我有点误解了JS中的范围或引用 我正在使用传单启动一个新的地图对象。我的代码是这样的: var revealing = (function() { var mapEl = "#map"; var mapName = "map"; var mapboxMap = '----'; var map; var init = function() { map = L.mapbox.map(mapName, mapboxMap);

我想我有点误解了JS中的范围或引用

我正在使用传单启动一个新的地图对象。我的代码是这样的:

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
    }

}());
如果我在init函数中引用“map”,我就会得到我想要的。但是在我引用map的任何其他地方(在函数内或通过'discovering'对象的其他地方),我都会得到一个对leaflight(L.mapbox…)创建的html对象的引用,而不是在init()中得到的实例化对象


如果有任何帮助,我们将不胜感激。

您没有显示您遇到问题的代码(例如,访问
map
并没有得到您期望的结果),但我怀疑问题不在于范围,而在于时间

在大型匿名函数中的任何位置,
map
将解析为您在该函数中声明的
map
变量。但该变量的值
未定义
,直到
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`
var=(函数(){
var mapEl=“#map”;
var mapName=“map”;
var mapboxMap='---';
var映射;
var init=函数(){
map=L.mapbox.map(mapName,mapboxMap);
map.setView([40,-100],5);
}
var useMap=function(){

console.log(map);//谢谢,我应该提供更多的上下文。我相信我的问题实际上是一个传单问题。接受你的回答是因为我没有提出正确的问题,而你的回答解决了我实际提出的问题。@user3522562:LOL!:-)