---
title: "Skumm eval()"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/159310-skumm-eval"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "lilja"
published: "2007-04-15T22:54:17.000Z"
updated: "2007-04-17T22:13:13.000Z"
replies: 6
views: 484
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/159310-skumm-eval"
---

# Skumm eval()

## #1 — lilja, 2007-04-15T22:54Z

Försöker komma igång lite med AJAX och tittar på lite olika lösningar. Nu hakade jag upp mig på en eval som jag tycker är väldigt skumm..

```
eval(method + '(\'\', result)');
```

Om jag kör samma sak i en alert() så blir resultatet t.ex. 

```
checkName('', result)
```

vilket känns rätt men är fel då det ska se ut som 

```
checkName('', 1)
```

 där 1 är variabeln result:s värde.När jag kör min kod så funkar de klockrent. Kan någon förklara så man fattar vad som händer?

Alltså blir jag konfunderad när result fungerar som en variabel när den bör fungera som statisk text??

Jag har ett exempel på <http://code.liljaonline.se/ajax/dmz.php>

Permalänk: https://www.webforum.nu/p/159310

## #2 — lilja, 2007-04-15T22:59Z

De är skummt, har suttit och funderat på detta en bra stund nu och så kommer man på något strax efter man tryckt på skicka.

Är det möjligen så att jag snöar in mig för mycket på php-syntaxen. Om det finns något i en sträng innanför eval som har samma namn som en variabel så funkar den helt enkelt som en variabel?

Om det är så varför fungerar då inte 

```
eval('method(\'\', result)');
```

Permalänk: https://www.webforum.nu/p/1959191

## #3 — nitro2k01, 2007-04-17T09:26Z

Du bör undvika att använda eval på det sättet så mycket du bara kan eftersom ditt returdata förr eller senare garanterat kommer att innehålla tecken som behöver escape'as som ' \\ och radbrytning.
Jag föreslår en lösning där du enbart använder eval för att för att hämta en funktionsreferens, och sedan användar call för att kalla på metoden. För att göra det enkelt skickar jag i exemplet med funktionsparametrarna som en array, och dessutom kommer arrayens första element vara funktionsnamnet. Det är saker du får stå ut med så länge.

```
<script type="text/javascript">
function checkName(parametrar){
	alert("Detta är den input servern fick: " + parametrar[1] + "\nDetta är svaret jag fick: " + parametrar[2])
}

function callSomething(name){
	eval(name).call(this, arguments);

}

callSomething("checkName", "mininput", "minrespons")
</script>
```

Permalänk: https://www.webforum.nu/p/1966009

## #4 — lilja, 2007-04-17T15:44Z

> **nitro2k01 skrev:**
>
> ```
> <script type="text/javascript">
> function checkName(parametrar){
> 	alert("Detta är den input servern fick: " + parametrar[1] + "\nDetta är svaret jag fick: " + parametrar[2])
> }
> 
> function callSomething(name){
> 	eval(name).call(this, arguments);
> 
> }
> 
> callSomething("checkName", "mininput", "minrespons")
> </script>
> ```

Ja det där verkar ju fungera betydligt bättre. Men jag förstår inte riktigt hur du skickar parametrarna? Innehåller arguments alla argument i en javascript-funktion?? Kan du inte förklara vad som händer i callSomething() också? :) Resten förstår jag (tror jag i alla fall)...

Permalänk: https://www.webforum.nu/p/1966109

## #5 — colione, 2007-04-17T16:51Z

arguments är en array som innehåller alla parametrar som funktionen har tagit emot.

Här kan du läsa på lite om call()
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Function:call>

Permalänk: https://www.webforum.nu/p/1966121

## #6 — lilja, 2007-04-17T19:35Z

> **colione skrev:**
>
> Här kan du läsa på lite om call()
> <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Function:call>

Ok, men jag fattar fortfarande inte alls vad this tillför i 

```
eval(name).call(this, arguments);
```

Permalänk: https://www.webforum.nu/p/1966157

## #7 — nitro2k01, 2007-04-17T22:13Z

Det kallar på funktionen som det objektet man kallar den för refererar till, i detta fall **eval(name)**.
Men du had lika gärna kunnat göra **eval(name)(arguments);** i detta fall.

Permalänk: https://www.webforum.nu/p/1966220

---

Tråden på webben: https://www.webforum.nu/amne/javascript/159310-skumm-eval
