Rumah >hujung hadapan web >tutorial js >Masalah dengan fungsi eval dalam kemahiran JavaScript_javascript
Melihat kod hari ini, saya menghadapi masalah dengan fungsi eval Saya telah membaca banyak catatan blog, tetapi saya masih tidak memahami fungsi eval dengan baik faham seperti berikut:
/* var start = [] , end = [] , timings = []; */ function f(){ //模拟程序执行时间 var sum = 0; for(var i =0 ;i < 100000; i++){ sum = sum/(i+1); } } function repeat(n, action){ for(var i=0; i<n ;i++){ eval(action); // eval函数 } } function benchmark(){ var start = [] , end = [] , timings = []; repeat(100, "start.push(new Date().getTime());f();end.push(new Date().getTime())"); for (var i =0; i< start.length; i++){ timings[i] = end[i] - start[i]; } return timings; } benchmark(); //结果为:[] //如果我把上面的benchmark中的局部变量移到全局就一切正常.
Jika saya mengalihkan pembolehubah setempat dalam penanda aras di atas ke global, semuanya berfungsi dengan baik.
Mengapa fungsi eval di sini menghasilkan kesan ini? Adakah ia bersamaan dengan alias fungsi eval?
Apabila eval() dipanggil terus, ia sentiasa dilaksanakan dalam skop konteks memanggilnya, yang bermaksud ia boleh mengakses pembolehubah dalam fungsi ulangan tetapi tidak boleh mengakses pembolehubah dalam fungsi penanda aras, tetapi ia boleh diakses dalam fungsi Akses kepada pembolehubah dalam skop global, jadi selepas anda menetapkan pembolehubah permulaan kepada pembolehubah global, anda boleh mengembalikan hasil yang diingini.
function repeat(n, action){ for(var i=0; i<n ;i++){ start.push(new Date().getTime());f();end.push(new Date().getTime()); // eval函数 } }
Pembolehubah mula dan akhir tidak boleh diakses secara berulang