【问题标题】:Accessing functions across different scopes跨不同范围访问函数
【发布时间】:2012-08-01 22:05:54
【问题描述】:

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

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

谁能指出我在这里做错了什么?

我编写自调用函数只是为了不破坏全局范围。在这个方向上的任何帮助都会对我有很大帮助。

【问题讨论】:

  • 在 IE8 中对我来说很好。请您创建一个重现问题的jsFiddle 吗?

标签: javascript scopes


【解决方案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,这会显式创建一个全局变量。

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

这有点傻。无论哪种方式,您都在“弄脏”全局范围,但现在您正在使用一堆不必要的代码和间接进行。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2016-04-04
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多