Javascript 跨不同作用域访问函数
我试图理解以下场景,其中我在一个作用域中定义了一个函数,并希望在另一个作用域中访问它 我有两个不同的JavaScript文件,helper.js和main.js,它们都有一个自调用函数: helper.js:Javascript 跨不同作用域访问函数,javascript,scopes,Javascript,Scopes,我试图理解以下场景,其中我在一个作用域中定义了一个函数,并希望在另一个作用域中访问它 我有两个不同的JavaScript文件,helper.js和main.js,它们都有一个自调用函数: helper.js: var outerShowData; (function(){ var innerShowData = function(param1, param2){ alert("Data : "+ param1 +" - "+ param2); } ou
var outerShowData;
(function(){
var innerShowData = function(param1, param2){
alert("Data : "+ param1 +" - "+ param2);
}
outerShowData = innerShowData;
})();
main.js:
(function(){
outerShowData("alpha", "beta");
outerShowData("gamma", "theta");
})();
如果我首先在我的页面中包含helper.js,然后是main.js,那么这在Firefox、Safari和Google Chrome中都能很好地工作。但是,它在IE8中不起作用
有人能指出我做错了什么吗
我编写自调用函数只是为了不弄脏全局范围。这方面的任何帮助都会对我大有帮助
// Your code would work identically with or without this variable declaration
var outerShowData;
(function(){
// This is a local variable, and cannot be accessed outside the containing function()
var innerShowData = function(param1, param2){
alert("Data : "+ param1 +" - "+ param2);
}
// This assigns a value to a global variable
outerShowData = innerShowData;
})();
您的outerShowData
变量是全局变量。它可以被任何JavaScript环境中未被破坏的任何其他代码段访问。如果这段代码给您带来了IE8的问题,那么IE8似乎被破坏了,尽管您的问题更可能存在于代码的其他地方。如果IE8不能正确地支持全局变量,这将是一个基本问题
您可以尝试设置并调用window.outerShowData
,这将显式创建一个全局变量
我编写自调用函数只是为了不弄脏全局范围
这有点傻。无论哪种方式,您都在“弄脏”全局范围,但现在您使用的是一堆不必要的代码和间接寻址
您的outerShowData
变量是全局变量。它可以被任何JavaScript环境中未被破坏的任何其他代码段访问。如果这段代码给您带来了IE8的问题,那么IE8似乎被破坏了,尽管您的问题更可能存在于代码的其他地方。如果IE8不能正确地支持全局变量,这将是一个基本问题
您可以尝试设置并调用window.outerShowData
,这将显式创建一个全局变量
我编写自调用函数只是为了不弄脏全局范围
这有点傻。无论哪种方式,您都在“弄脏”全局范围,但现在您使用了一堆不必要的代码和间接寻址。在IE8中对我来说很好。你能做一个重现问题的测试吗?在IE8中对我来说很好。请你做一个能再现这个问题的实验好吗?