访问不同范围的功能

时间:2012-08-03 20:26:55

标签: javascript scopes

我正在尝试理解以下场景,其中我在一个范围中定义了一个函数,并希望另一个范围内访问它。

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

有谁可以指出我在这里做错了什么?

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

1 个答案:

答案 0 :(得分:1)

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

  

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

这有点傻。无论哪种方式,你都在“弄脏”全局范围,除非你现在用一堆不必要的代码和间接方式来做它。