2016-08-02 8 views
0

私はmycode.js私はコール変数2

<script type="text/javascript" src="mycode.js"></script> 
(function ($) { 
    var g_var = 10; 
    console.log("func2: " + g_var); 
    function2(); 
} 

しかしg_varない主なHTMLのコードを使用し

(function($) { 
    function2() { 
     console.log("main func: " + g_var); 
    } 
}(jQuery)); 

で私のコードを持っています関数2で表示可能

Uncaught ReferenceError: function2 is not defined
Uncaught ReferenceError: g_var is not defined

どうすれば修正できますか?

答えて

0

宣言のスコープについてお読みください。ほぼすべてのプログラミング言語で、このようなvaribaleと関数スコープの動作が見つかります。

回答:

はあなたの問題を解決するために、あなたはそれ以外の場合は、内部でのみ使用可能です、IIFEfunction2外を作成する必要があります。そして、パラメータを使用して値を渡します。

function function2(g_var) { 
    console.log("main func: " + g_var); 
} 

(function() { 
    var g_var = 10; 
    function2(g_var); 
})(); 

追加:あなたは関数と同じスコープ内の変数g_varを作成した場合

、あなたもfunction2の内側にそれをアクセスすることができました。しかし、私はほとんどの場合それをしません。

コールバックを使用して作業する場合と同様に、他の関数の内部で作成した場合と同様に、これが意味をなさない場合があります。しかし、ほとんどの場合、最初の例を使用してパラメータを使用する必要があります。

(function() { 
    var g_var = 10; 

    function function2() { 
     console.log("main func: " + g_var); 
    } 

    function2(); 
})(); 

しかし、実際には、ほとんどの場合、それほど良いアイデアはありません。

$(".foo").each(function() { 
    var that = this; 

    $(".bar").click(function() { 
     // access 'that' 
    }); 
}); 
-1

eisbehrは、右の第1あなたはその後、宵はすべて外にあなたの変数を定義する必要が生命維持のあなたのFUNCを定義する必要があります:あなたはこのような何かを考えるとき、それは理にかなっています。その後、そのjsファイル内の変数をすべての関数とスニペットで使用できます。

このようにコードを書く必要があります。

var g_var; 

function function1(){ 
    g_var=4; 
    console.log("main func: " + g_var); 
} 

function function2(){ 
     g_var=10; 
     console.log("func2: " + g_var); 
} 
0

あなたはクロージャを使用していますが、パブリックメソッドを返すことはできません。この例を参照してくださいとドキュメントMDN: JS Closures

var foo = (function($) { 
    function f2(g_var) { // private 
     console.log("main func: " + g_var); 
    } 
    return { 
     function2: function(g_var) { 
      f2(g_var); 
     } 
    }; 
})(jQuery); 

をチェックして、あなたはこのようにそれを呼び出すことができます。

foo.function2(g_var);