Сборка от 17 марта 2017 г



Download 9,9 Mb.
bet208/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   204   205   206   207   208   209   210   211   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Использование eval


В простейшем случае eval всего лишь выполняет код, например:


var a = 1; (function() {


var a = 2;
eval(' alert(a) '); // 2
})()

Но он может не только выполнить код, но и вернуть результат. Вызов eval возвращает последнее вычисленное выражение: Например:


alert( eval('1+1') ); // 2




При вызове eval имеет полный доступ к локальным переменным.

Это означает, что текущие переменные могут быть изменены или дополнены:


var x = 5;


eval(" alert( x ); x = 10"); // 5, доступ к старому значению alert( x ); // 10, значение изменено внутри eval



Неграмотное использование eval


Начнём с того, что eval применяется очень редко. Действительно редко. Есть даже такое выражение «eval is evil» (eval – зло).


Причина проста: когда‑то JavaScript был гораздо более слабым языком, чем сейчас, и некоторые вещи без eval было сделать невозможно. Но те времена давно прошли. И теперь найти тот случай, когда действительно надо выполнить код из строки – это надо постараться.


Но если вы действительно знаете, что это именно тот случай и вам необходим eval – есть ряд вещей, которые нужно иметь в виду. Доступ к локальным переменным – худшее, что можно сделать при eval .
Дело в том, что локальные переменные могут быть легко переименованы:

function sayHi() {


var phrase = "Привет"; eval(str);
}

Переменная phrase может быть переименована в hello , и если строка str обращается к ней – будет ошибка.


Современные средства сжатия JavaScript переименовывают локальные переменные автоматически. Это считается безопасным, так как локальная переменная видна лишь внутри функции и если в ней везде поменять phrase на p , то никто этого не заметит.


До сжатия:

function sayHi() {


var phrase = "Привет"; alert( phrase );
}

После сжатия:


function sayHi() { var a = "Привет"; alert( a );


}

На самом деле всё ещё проще – в данном случае утилита сжатия автоматически уберёт переменную a и код станет таким:


function sayHi() { alert( "Привет" );


}

Итак, если где‑то в функции есть eval , то его взаимодействие с локальными переменными будет нарушено с непредсказуемыми побочными эффектами.


Некоторые инструменты сжатия предупреждают, когда видят eval или стараются вообще не сжимать такой код вместе с его внешними функциями, но всё это борьба с последствиями кривого кода.
Как правило, eval не нужен, именно поэтому говорят, «eval is evil».



Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   204   205   206   207   208   209   210   211   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish