Fungsi bawaan eval memungkinkan kita untuk menjalankan kode dari sebuah string.
Sintaksnya adalah:
let result = eval(code);
Sebagai contoh:
let code = 'alert("Halo")';
eval(code); // Halo
Sebuah kode yang berupa string bisa panjang, berupa deklarasi fungsi, variabel dan lain-lain.
Hasil dari eval adalah hasil dari peryataan terakhir.
Sebagai contoh:
let value = eval('1+1');
alert(value); // 2
let value = eval('let i = 0; ++i');
alert(value); // 1
Kode yang dievaluasi akan dieksekusi di lingkungan leksikal saat ini, sehingga dapat melihat variabel luar:
let a = 1;
function f() {
let a = 2;
eval('alert(a)'); // 2
}
f();
Itu juga dapat mengubah variabel luar:
let x = 5;
eval("x = 10");
alert(x); // 10, nilai diubah
Dalam mode ketat, eval memiliki lingkungan leksikal sendiri. Jadi, fungsi dan variabel yang dideklarasikan di dalam eval, tidak akan terlihat di luar:
// pengingat: dalam contoh yang dijalankan 'use strict' diaktifkan secara bawaan
eval("let x = 5; function f() {}");
alert(typeof x); // undefined (tidak ada variabel)
// fungsi f juga tidak terlihat
Tanpa use strict, eval tidak memiliki lingkungan leksikal sendiri, jadi kita akan melihat x dan f di luar.
Menggunakan “eval”
Dalam pemrograman modern eval jarang digunakan. Sering dikatakan bahwa “eval is evil” atau “eval itu jahat”.
Alasannya sederhana: dulu JavaScript adalah bahasa yang jauh lebih lemah, banyak hal yang hanya bisa dilakukan dengan eval. Tapi waktu itu telah berlalu satu dekade yang lalu.
Sekarang, hampir tidak ada alasan untuk menggunakan eval. Jika seseorang menggunakannya, ada kemungkinan mereka dapat menggantinya dengan konstruksi bahasa modern atau JavaScript Module