5

ここで少し混乱しています...次の.jsような関数を持つファイルが1つある場合:

function myMain() {
    var count=0;
    count++;               
    myHelper(count);
    alert(count);
}

function myHelper(count) {
    alert(count);
    count++;
}

myHelper()他の.jsファイルで別のメソッドを呼び出すことはできますか?または、count変数をある関数から別の関数に渡して、他の.jsファイルに呼び出す方法は他にありますか。これについて何か考えはありますか?ありがとう!

4

3 に答える 3

16

更新:最近では、 webpackなどのモジュールバンドラーを使用して、または経由して、タグでES6 import/を使用することをお勧めします。export<script>type="module"


両方のスクリプトファイルが同じページに含まれている場合、それらは同じグローバルJavaScriptコンテキストで実行されるため、2つの名前は互いに上書きされます。したがって、同じ名前の異なる.jsファイルに2つの関数を入れて、作成したとおりに両方にアクセスすることはできません。

最も簡単な解決策は、関数の1つを名前変更することです。

より良い解決策は、名前空間を使用してJavaScriptをモジュール式に記述し、各スクリプトファイルが可能な限り最小限の(できれば1つの)オブジェクトをグローバルスコープに追加して、個別のスクリプト間の名前の競合を回避することです。

JavaScriptでこれを行うにはいくつかの方法があります。最も簡単な方法は、各ファイルに1つのオブジェクトを定義することです。

// In your first script file
var ModuleName = {
    myMain: function () {
        var count=0;
        count++;               
        myHelper(count);
        alert(count);
    },

    myHelper: function (count) {
        alert(count);
        count++;
    }
}

後のスクリプトファイルで、関数を呼び出します ModuleName.myMain();

より一般的な方法は、次のような自己評価関数を使用することです。

(function (window, undefined) {

    // Your code, defining various functions, etc.
    function myMain() { ... }
    function myHelper(count) { ... }

    // More code...

    // List functions you want other scripts to access
    window.ModuleName = {
        myHelper: myHelper,
        myMain: myMain  
    };
})(window)
于 2013-02-08T04:54:32.213 に答える
-2

メソッドを上書きしようとしていることがわかっている場合は、最初に古いメソッドを変数に格納してから、その変数を介して関数の他の実装を呼び出すことができます。

于 2013-07-24T08:31:26.617 に答える
-4

はい、1つのhtmlまたはjspページに両方のjsファイルが含まれている限り、他のjsファイルからmyHelper()を呼び出すことができます。

あなたはこれを見たいかもしれません: あるJavaScriptで書かれた関数を別のJSファイルで呼び出すことはできますか?

于 2013-02-08T04:20:24.620 に答える