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'
});
});