javascript - 跨不同范围访问函数

标签 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 中不起作用。

有人能指出我在这里做错了什么吗?

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

最佳答案

// 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,这会显式创建一个全局变量。

I wrote the self-invoking function just not to dirty up the global scope.

这有点愚蠢。不管怎样,你都会“弄脏”全局作用域,只不过现在你使用了一堆不必要的代码和间接方式。

关于javascript - 跨不同范围访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802813/

相关文章:

javascript - SetAttribute 在 IE 中不起作用

javascript - jQuery 切换 - 关闭除此之外的所有

javascript - 鼠标悬停时闪烁文本

arrays - Julia 中的局部作用域

c# - 变量的有效范围

javascript - 如何将对象的对象数组转换为一维数组?

javascript - 更新按钮单击 Javascript 上的数组

ruby-on-rails - 将 has_scopes gem 中的 current_scopes 作为参数传递

azure - 无法将 key 添加到 Azure key-Vault 支持的 Databricks 范围

ruby-on-rails-3 - ActiveRecord Rails 3 范围与类方法