2017-10-13 1 views
1

Bitte sagen Sie, ob die folgenden möglich wären, ohne function fun eine Methode eines Objekts zu machen.Gibt es in JavaScript eine Möglichkeit, eine Funktion aufzurufen, die innerhalb des Bereichs einer anderen Funktion deklariert ist, indem Sie ihren Namen im Zeichenfolgenformat verwenden?

(function a() { 
var fun = function() { 
console.log('abc'); 
} 
var x = 'fun'; 
// call fun using x (How ?) 
})(); 
+0

Es gibt immer 'eval'. Aber es sollte nie dafür verwendet werden. Warum versuchen Sie das, was ist Ihr [tatsächliches Problem] (https://meta.stackexchange.com/q/66377)? – Bergi

Antwort

0

Sie könnten eval verwenden. Dadurch wird die Zeichenfolge als JavaScript-Code ausgewertet.

(function a() { 
 
var fun = function() { 
 
console.log('abc'); 
 
} 
 
var x = 'fun'; 
 

 
eval(x)(); 
 
})();

+0

Das ist nicht die gleiche Funktion, es ist eine Kopie, aber hat nicht die gleiche Schließung (der Grund, dass Sie eine Funktion innerhalb einer Funktion haben würden), so dass sein Verhalten nicht übereinstimmen würde, da es keinen Zugriff auf dieselben Daten hat. – Blindman67

+0

@ Blindman67 Wovon redest du? Nichts wird hier kopiert. 'eval (x)()' verhält sich genauso wie 'fun()'. – Bergi

+0

@Bergi Ich nehme an, dass die Antwort für die Frage war. "Greifen Sie auf die Funktion außerhalb der umschließenden Funktion zu" und dass das angegebene Snippet nicht das ist, was diese Antwort bedeutet, da dies sinnlos ist, da bereits auf die Funktion zugegriffen wird, in der sich die Auswertung befindet. – Blindman67

-1

Ich ziehe es immer Fenstervariable zu verwenden, um meine Funktion anstelle der Verwendung von eval ausführen, ich erinnere mich auch, dass einige Browser Warnungen wirft, wenn Sie eval verwenden. Auch bei Chrome-Erweiterungen ist standardmäßig nicht aktiviert.

windows.x = function(){ 
    // do something here 
} 

und es dann wie folgt aus::

Also in meinem Fall, können Sie eine Funktion in Windows globale Variable wie folgt festgelegt

windows["x"]() 
+0

Das ist im Wesentlichen eine Methode eines Objekts, die das OP (aus welchen Gründen auch immer) zu vermeiden versuchte. Natürlich wäre die Verwendung eines Objekts der richtige Weg, aber globale Variablen dafür zu verwenden, ist wirklich falsch. – Bergi

Verwandte Themen