2016-08-02 28 views
0

Ich habe meinen Code in mycode.jsAnrufvariablen der Funktion # 1 in Funktion # 2

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

ich den Code in HTML-Haupt verwenden

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

aber g_var nicht sichtbar in Funktion2

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

Wie kann ich das korrigieren?

Antwort

0

Sie sollten über Deklarationsbereiche lesen. Sie würden dieses Verhalten von Varibale und Funktionsbereichen in fast jeder Programmiersprache finden.

Antwort:

Ihr Problem zu lösen, haben Sie function2 außerhalb der IIFE zu schaffen, sonst ist es nur auf der Innenseite zur Verfügung. Und dann verwenden Sie einen Parameter, um den Wert zu übergeben.

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

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

Zusatz:

Wenn Sie die Variable g_var im gleichen Umfang wie die Funktion erstellen, können Sie es auf der Innenseite des function2 zugreifen. Aber das würde ich in den meisten Fällen nicht tun.

Es gibt einige Fälle, in denen dies sinnvoll ist, wie bei der Arbeit mit Rückrufen, die im Inneren anderer Funktionen erstellt wurden. Aber in den meisten Fällen sollten Sie mit dem ersten Beispiel gehen und Parameter verwenden!

(function() { 
    var g_var = 10; 

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

    function2(); 
})(); 

Aber wirklich, das ist in den meisten Fällen überhaupt keine gute Idee! Es macht Sinn, wenn man bedenkt, etwas wie folgt aus:

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

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

Eisbehr rechts erste ist, müssen Sie Ihre func aus dem IIFE definieren, dann sollten yoi Ihre Variable außerhalb alles definieren. Dann können Sie die Variable in dieser js-Datei für jede Funktion und jedes Snippet verwenden.

Sie sollten Ihren Code so schreiben.

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

Sie verwenden eine Schließung, aber keine öffentliche Methode zurückgeben. Sehen Sie dieses Beispiel und überprüfen Sie die docs 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); 

und Sie können es wie folgt aufrufen:

foo.function2(g_var);