7
votes

Appelez la fonction JavaScript codée dans une chaîne

Si je mets une fonction dans une chaîne comme ceci:

console.log(functionString);


7 commentaires

Cela aiderait si vous posteriez exactement ce qui est dans la chaîne.


Vous pouvez simplement faire "retour message.tostring ()" à l'intérieur de la fonction


Est-ce possible, oui, cela peut être, mais qu'essayez-vous de faire exactement?


Stackoverflow.com/Questtions/912596/...


Epascarello, je voudrais convertir la chaîne en une fonction. Brian, je ne veux pas appeler une fonction existante. Je voudrais convertir la chaîne entière en une fonction.


@Brianhamblen C'est une question différente de celle de celle-là. Dans cette question, ils ont le nom d'une fonction qu'ils souhaitent appeler.


On est obligé de remettre en question pourquoi vous voulez faire cela. L'évaluation du code arbitraire est considérée comme dangereuse dans presque toutes les langues qui ont la capacité.


4 Réponses :


2
votes

Votre fonctionString code> contient exactement la chaîne

"fonction (message) {console.log (message);}" code> p>

évaluer AS-Est fait le moteur JavaScript présent avec une syntaxe incorrecte (il n'y a pas de nom pour cette fonction). JavaScript s'attend à la construction de la fonction () {} code>. Sinon, vous pouvez utiliser une fonction anonyme (c'est-à-dire aucun nom de non-nom), mais uniquement en tant que paramètre ou dans un contexte d'évaluation d'une expression. L'expression d'évaluation typique minimale serait (fonction () {}) () code> si vous souhaitez obtenir une fantaisie, ! Fonction () {} code> est également OK - la marque d'exclamation À l'avant, la transformation en expression booléenne nécessitant une évaluation de la fonction avant de nier la sortie. P>

Donc, dans votre exemple, cela fonctionnera: p>

eval ("(" + "+" ) ('ABC') "); code> p>

parce que vous faites une fonction de fonction anonyme - quelque chose JavaScript peut vivre avec. p>

Vous pouvez également utiliser des crochets juste, Ensuite, vous devez attribuer le résultat à quelque chose que vous pouvez utiliser ultérieurement: P>

var foo = eval("("+functionString+")");
foo('ddd');


3 commentaires

Travaux, merci! Pourriez-vous me dire ce que je devrais en savoir plus à ce sujet, par exemple le +


@ user1840267 pour Eval (), il est toujours logique d'imprimer la chaîne réelle que vous évaluez, puis de la copier-la coller dans l'éditeur de votre choix dans le fichier vide .js et de voir s'il est syntaxiquement correct.


Ah, je vois, il enveloppe simplement la fonction entre parenthèses! Je l'ai Merci!



3
votes

Vous êtes presque là, mais vous manquez quelque chose.

Lorsque nous appelons ToString () sur votre fonction, nous obtenons xxx

que nous pouvons alors eval. Cependant, nous créons ici un objet de fonction anonyme ici; Nous ne pourrons pas l'appeler!

Si nous au lieu de quelque chose comme: xxx

Nous pouvons alors faire ce qui suit < Pré> xxx


0 commentaires

1
votes

Oui c'est possible en JavaScript, mais vous ne pouvez pas eval code> fonction anonyme sans attribution

Donc, vous y passez comme si P>

var functionString = function (message) {
    console.log(message);
}.toString();

eval("myfunction =" + functionString)

myfunction("Hello World!")


0 commentaires

1
votes

Votre fonction de fonctionnement est une chaîne qui ressemble à xxx

vous pouvez couvrir cette chaîne à une expression de fonction immédiatement invoquée (iife) à l'aide de la concaténation de la chaîne, similaire à Ci-dessous. xxx

puis évaluer cela. Voici le résultat de la console JavaScript de Chrome: xxx


0 commentaires