访问在另一个文件中定义的局部变量

Access local variables defined inside another file

本文关键字:定义 局部变量 文件 另一个 访问      更新时间:2023-09-26

interface.js

((function(){
    var Person=function(){
    }
    .......
})();

实施.js

((function(){
    //access local variables(Person) in interface.js
    Person.prototype.eat=function(){
    }
})();

加载它们:

function getScript(src) {
    document.write('<' + 'script src="' + src + '"' + ' type="text/javascript"><' + '/script>');
}
getScript("interface.js");
getScript("implemention.js");

如代码所示,我想从implemention.js访问interface.js中定义的局部变量"Person",无法直接访问,因此我尝试使用这样的闭包:

界面.js

((function(){
    ...
    var Person=function(){
    }
    window._load_implement=(function(){
        return function(impl){
            impl && impl();
            delete window._load_implement;
        }
    })();
})();

实施.js

((function(){
    var imp=function(){
        Person.prototype.eat=....   
    }
    window._load_implement(imp);
})();

IMO,当imp方法运行时,应关闭Peson和其他变量,这意味着应该访问,但它不起作用。

有什么问题吗?


我发布了这个问题并试图得到答案,因为我看到了一些类似的用法,以谷歌地图为例,main.js将被加载,其中所有与地图相关的对象(如Map Marker和一些 util 函数)都在那里定义,然后其他谷歌地图模块,如 InfoWindow 将在需要时加载, 但是infowindow.js可以main.js中定义的所有实用程序功能。

如果要使用立即调用的函数表达式并将对象添加到全局命名空间,则可以将它们显式添加到窗口对象或正确作用域中的另一个非全局对象,而不是将对象定义为函数内的局部变量:

(function(){
    window.Person = function(){
    }
    .......
})();

var Person = (function(){
})();

后者称为模块模式。