From 980fe00a74a9ad013b945755415ace2e5429c3c2 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 27 Oct 2021 02:31:24 +0300 Subject: [RU] Remove notranslate (#2874) --- .../reference/global_objects/eval/index.html | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'files/ru/web/javascript/reference/global_objects/eval') diff --git a/files/ru/web/javascript/reference/global_objects/eval/index.html b/files/ru/web/javascript/reference/global_objects/eval/index.html index f3bad3a0e3..b5cfcb75ca 100644 --- a/files/ru/web/javascript/reference/global_objects/eval/index.html +++ b/files/ru/web/javascript/reference/global_objects/eval/index.html @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/eval

Синтаксис

-
eval(string)
+
eval(string)

Параметры

@@ -46,19 +46,19 @@ translation_of: Web/JavaScript/Reference/Global_Objects/eval

Если аргумент, переданный eval(), не является строкой, eval() возвращает его неизменным. В следующем примере определён конструктор String, и eval() не вычисляет значение выражения, записанного в строковом виде, а возвращает объект типа String.

-
eval(new String("2 + 2")); // возвращает объект типа String, содержащий "2 + 2"
+
eval(new String("2 + 2")); // возвращает объект типа String, содержащий "2 + 2"
 eval("2 + 2");             // возвращает 4
 

Это ограничение легко обойти при помощи toString().

-
var expression = new String("2 + 2");
+
var expression = new String("2 + 2");
 eval(expression.toString());
 

Если вы используете eval косвенно, вызовом его через ссылку, а не просто eval, в ECMAScript 5 это работает в глобальной области видимости, а не в локальной; это значит, что eval будет вызван в глобальной области видимости, а код будет выполнен с отсутствием доступа к локальным переменным в пределах области видимости, где он был вызван.

-
function test() {
+
function test() {
   var x = 2, y = 4;
   console.log(eval("x + y"));  // Прямой вызов, использует локальную области видимости, результат - 6
   var geval = eval;
@@ -78,7 +78,7 @@ eval(expression.toString());
 
 

Вам не следует использовать eval(), чтобы конвертировать имена свойств в свойства. Рассматривая следующий пример, где свойство объекта используемое для доступа неизвестно до выполнения кода. Это можно сделать с  eval:

-
var obj = { a: 20, b: 30 };
+
var obj = { a: 20, b: 30 };
 var propname = getPropName();  // возвращает "a" или "b"
 
 eval( "var result = obj." + propname );
@@ -86,7 +86,7 @@ eval( "var result = obj." + propname );
 
 

Однако, eval() здесь не нужен. По факту, использование здесь его удивляет. Вместо него используйте доступ к свойствам, который быстрее и безопаснее:

-
var obj = { a: 20, b: 30 };
+
var obj = { a: 20, b: 30 };
 var propname = getPropName();  // возвращает "a" или "b"
 var result = obj[ propname ];  //  obj[ "a" ] то же, что и obj.a
 
@@ -95,7 +95,7 @@ var result = obj[ propname ]; // obj[ "a" ] то же, что и obj.a

У JavaScript функции первого класса, что значит, что вы можете передавать функции как аргументы, хранить их в переменных или свойствах объектов и так далее. Многие DOM API созданы с учётом этого, так что вы можете (и вам следует) писать:

-
// вместо setTimeout(" ... ", 1000) :
+
// вместо setTimeout(" ... ", 1000) :
 setTimeout(function() { ... }, 1000);
 
 // вместо elt.setAttribute("onclick", "...") использовать:
@@ -123,7 +123,7 @@ elt.addEventListener("click", function() { ... } , false); 

В следующем коде оба выражения содержат eval(), возвращающий 42. Первое определяется строкой "x + y + 1"; второе - строкой "42".

-
var x = 2;
+
var x = 2;
 var y = 39;
 var z = "42";
 eval("x + y + 1"); // возвращает 42
@@ -134,7 +134,7 @@ eval(z);           // вернёт 42
 
 

Следующий пример использует eval() для получения значения выражения str. Эта строка состоит из JavaScript выражений, печатающих в консоль, и, если x равен пяти, призывающих z значение 42, или 0 в противном случае. Когда второе выражение будет исполнено, eval() будет считать выражения выполненными, а также это установит значение выражению переменной z и вернёт его.

-
var x = 5;
+
var x = 5;
 var str = "if (x == 5) {console.log('z is 42'); z = 42;} else z = 0; ";
 
 console.log("z is ", eval(str));
@@ -143,7 +143,7 @@ console.log("z is ", eval(str));

eval() вернёт значение последнего выполняемого выражения

-
var str = "if ( a ) { 1+1; } else { 1+2; }";
+
var str = "if ( a ) { 1+1; } else { 1+2; }";
 var a = true;
 var b = eval(str);  // вернёт 2
 
@@ -156,7 +156,7 @@ console.log("b is : " + b);

eval как строковое определение функции, включающее "(" и ")" как префикс и суффикс

-
var fctStr1 = "function a() {}"
+
var fctStr1 = "function a() {}"
 var fctStr2 = "(function a() {})"
 var fct1 = eval(fctStr1)  // вернёт undefined
 var fct2 = eval(fctStr2)  // вернёт функцию
-- 
cgit v1.2.3-54-g00ecf