2012-08-03 94 views
1

我想了解以下場景,我已經在一個範圍內定義了一個函數,並且想要訪問另一個範圍。跨不同範圍訪問函數

我有兩個不同的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

回答

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而不是顯式創建全局變量。

我寫了自我調用函數只是爲了不弄髒全局範圍。

這是一種愚蠢的。除了現在你正在用一堆不必要的代碼和間接方法來做這件事之外,你對這個全球範圍都是「污染」的。