跨不同范围访问函数

问题描述:

我想了解以下场景,我已经在一个范围内定义了一个函数,并且想要访问另一个范围。跨不同范围访问函数

我有两个不同的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中不起作用。

任何人都可以指出我在这里做错了什么?

我写了自我调用函数,而不是弄脏了全局范围。任何对这个方向的帮助都会对我有很大帮助。

+0

在IE8中适合我。你可以制作一个[jsFiddle](http://jsfiddle.net/)来重现问题吗? – Ryan 2012-08-03 20:34:47

// 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而不是显式创建全局变量。

我写了自我调用函数只是为了不弄脏全局范围。

这是一种愚蠢的。除了现在你正在用一堆不必要的代码和间接方法来做这件事之外,你对这个全球范围都是“污染”的。