eval函式
“魔鬼”函式?
如果你現在的代碼中使用了eval(),記住該咒語“eval()是魔鬼”,此方法接受任意的字串,并當作JavaScript代碼來處理,當有問題的代碼是事先知道的(不是運行時確定的),沒有理由使用eval(),eval 用的好不好 其實和使用者的水平有關系
作用域
在eval()中創建的任何變數或函式都不會被提升,因為在決議代碼的時候,它們被包含在一個字串中;它們只在eval()執行的時候創建
為什么不提倡使用eval函式?
- 可讀性非常差
- 不好再做優化和編譯
- 會輕微增加性能消耗
- 不安全,比如 eval input 的值
直接參考 or 間接參考
var a = 1;
(function(){
var a = 2;
eval("console.log(a)");
//輸出為2
(0, eval)("console.log(a)");
//輸出是1
})()
間接參考eval,陳述句會被優化至全域作用域
詳見stackoverflow
一些奇妙的用途
var arr = [1,2,3,4,5]
function sum(arr) {
return eval(arr.join('+'));
}
//輸出15
for (var loop = 1; loop < 10; loop++) {
eval('document.getElementById("div"+loop).innerHTML="123"');
}
但很多時候,我們仍能找到其他更高效的的方法替代eval
var obj={
name:'lxl',
age:20
}
//eval
var property = "name";
alert(eval("obj." + property));
// 更好的
var property = "name";
alert(obj[property]); //es6解構賦值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242837.html
標籤:其他
下一篇:資訊系統安全 總結提綱
