Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨不同作用域访问函数_Javascript_Scopes - Fatal编程技术网

Javascript 跨不同作用域访问函数

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

我试图理解以下场景,其中我在一个作用域中定义了一个函数,并希望在另一个作用域中访问它

我有两个不同的JavaScript文件,helper.js和main.js,它们都有一个自调用函数:

helper.js:

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中对我来说很好。请你做一个能再现这个问题的实验好吗?