1

あるスコープで関数を定義し、別のスコープにアクセスしたいという次のシナリオを理解しようとしています。

helper.js と main.js という 2 つの異なる JavaScript ファイルがあり、どちらも自己呼び出し関数を持っています。

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 では動作しません。

ここで私が間違っていることを誰かが指摘できますか?

グローバルスコープを汚さないように、自己呼び出し関数を書きました。この方向での助けは、私を大いに助けてくれます。

4

1 に答える 1

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代わりに、明示的にグローバル変数を作成する設定と呼び出しを試すことができます。

グローバルスコープを汚さないように、自己呼び出し関数を書きました。

これはちょっとばかげています。いずれにせよ、グローバルスコープを「汚す」ことになりますが、今は不要なコードと間接的なコードを大量に使用しています。

于 2012-08-03T20:35:05.670 に答える