我试图理解以下场景,其中我在一个作用域中定义了一个函数并想要在另一个作用域中访问它。
我有两个不同的 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/