You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To make things safe, and limit it to arithmetics only, we can check the `expr` using a [regular expression](info:regular-expressions), so that it only may contain digits and operators.
11
+
Abychom všechno zabezpečili a omezili se jen na aritmetiku, můžeme zkontrolovat `výraz` pomocí [regulárního výrazu](info:regular-expressions), aby směl obsahovat jen číslice a operátory.
Without`use strict`, `eval`doesn't have its own lexical environment, so we would see `x`and`f`outside.
68
+
Bez`use strict` nemá `eval`své vlastní lexikální prostředí, takže bychom `x`a`f`venku viděli.
69
69
70
-
## Using "eval"
70
+
## Použití „eval“
71
71
72
-
In modern programming `eval`is used very sparingly. It's often said that "eval is evil".
72
+
V moderním programování se `eval`používá velmi vzácně. Často se říká, že „eval je zlo“ (anglicky „eval is evil“).
73
73
74
-
The reason is simple: long, long time ago JavaScript was a much weaker language, many things could only be done with `eval`. But that time passed a decade ago.
74
+
Důvod je jednoduchý: před dávnými, dávnými časy byl JavaScript mnohem slabší jazyk a mnoho věcí bylo možné provést jedině pomocí `eval`. Ale tahle doba pominula už před deseti lety.
75
75
76
-
Right now, there's almost no reason to use `eval`. If someone is using it, there's a good chance they can replace it with a modern language construct or a [JavaScript Module](info:modules).
76
+
V současnosti není téměř žádný důvod, proč `eval` používat. Pokud ho někdo používá, je velká šance, že ho lze nahradit nějakým moderním jazykovým konstruktem nebo [JavaScriptovým modulem](info:modules).
77
77
78
-
Please note that its ability to access outer variables has side-effects.
78
+
Prosíme všimněte si, že jeho schopnost přistupovat k vnějším proměnným má vedlejší efekty.
79
79
80
-
Code minifiers (tools used before JS gets to production, to compress it) rename local variables into shorter ones (like`a`, `b`etc) to make the code smaller. That's usually safe, but not if`eval`is used, as local variables may be accessed from eval'ed code string. So minifiers don't do that renaming for all variables potentially visible from `eval`. That negatively affects code compression ratio.
80
+
Minifikátory kódu (nástroje používané před odesláním JS do produkce, aby jej zkomprimovaly) přejmenovávají lokální proměnné na kratší (např.`a`, `b`atd.), aby kód zkrátily. To je obvykle bezpečné, ale při použití`eval`ne, protože vyhodnocovaný řetězec kódu může k lokálním proměnným přistupovat. Minifikátory tedy u proměnných, které mohou být viditelné z `eval`, toto přejmenování neprovádějí. To negativně ovlivňuje poměr komprese kódu.
81
81
82
-
Using outer local variables inside `eval`is also considered a bad programming practice, as it makes maintaining the code more difficult.
82
+
Rovněž používání vnějších lokálních proměnných uvnitř `eval`se považuje za špatnou programátorskou praktiku, protože ztěžuje údržbu kódu.
83
83
84
-
There are two ways how to be totally safe from such problems.
84
+
Existují dva způsoby, jak být před takovými problémy zcela v bezpečí.
85
85
86
-
**If eval'ed code doesn't use outer variables, please call`eval`as`window.eval(...)`:**
86
+
**Jestliže vyhodnocovaný kód nepoužívá vnější proměnné, prosíme volejte`eval`jako`window.eval(...)`:**
87
87
88
-
This way the code is executed in the global scope:
88
+
Tímto způsobem bude kód spuštěn v globálním rozsahu platnosti:
89
89
90
90
```js untrusted refresh run
91
91
let x =1;
92
92
{
93
93
let x =5;
94
-
window.eval('alert(x)'); // 1 (global variable)
94
+
window.eval('alert(x)'); // 1 (globální proměnná)
95
95
}
96
96
```
97
97
98
-
**If eval'ed code needs local variables, change`eval`to`new Function`and pass them as arguments:**
98
+
**Jestliže vyhodnocovaný kód potřebuje lokální proměnné, změňte`eval`na`new Function`a předejte je jako argumenty:**
99
99
100
100
```js run
101
101
let f =newFunction('a', 'alert(a)');
102
102
103
103
f(5); // 5
104
104
```
105
105
106
-
The`new Function`construct is explained in the chapter <info:new-function>. It creates a function from a string, also in the global scope. So it can't see local variables. But it's so much clearer to pass them explicitly as arguments, like in the example above.
106
+
Konstrukt`new Function`je vysvětlen v kapitole <info:new-function>. Vytvoří funkci z řetězce, rovněž v globálním rozsahu platnosti. Funkce tedy neuvidí lokální proměnné. Je však mnohem čistší předat je explicitně jako argumenty, tak jako v uvedeném příkladu.
107
107
108
-
## Summary
108
+
## Shrnutí
109
109
110
-
A call to `eval(code)`runs the string of code and returns the result of the last statement.
111
-
-Rarely used in modern JavaScript, as there's usually no need.
112
-
-Can access outer local variables. That's considered bad practice.
113
-
-Instead, to `eval` the code in the global scope, use`window.eval(code)`.
114
-
-Or, if your code needs some data from the outer scope, use`new Function`and pass it as arguments.
110
+
Volání `eval(kód)`spustí řetězec kódu a vrátí výsledek posledního příkazu.
111
+
-V moderním JavaScriptu se používá málokdy, jelikož obvykle není zapotřebí.
112
+
-Může přistupovat k vnějším lokálním proměnným. To se považuje za špatnou praktiku.
113
+
-K vyhodnocení kódu v globálním rozsahu platnosti místo něj použijte`window.eval(kód)`.
114
+
-Nebo, jestliže váš kód potřebuje data z vnějšího rozsahu, použijte`new Function`a předejte je jako argumenty.
0 commit comments