再探JS---eval函式
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解構賦值
相關文章
- Go語言入門系列(六)之再探函式Go函式
- 函式詳解 | VLOOKUP 函式:最為人熟知的偵探函式
- 再談函式和一等公民函式
- JavaScript學習筆記(七)—— 再說函式JavaScript筆記函式
- 再探強化學習強化學習
- Vue原始碼探祕(五)(_render 函式的實現)Vue原始碼函式
- Nuxt.js 錯誤偵探:useError 組合函式UXJSError函式
- 簡單探討sum()函式返回null的問題函式Null
- 10、DNS隧道技術再探DNS
- 再探URLDNS鏈(手搓exp)DNS
- 再探JVM記憶體模型JVM記憶體模型
- 再探Stagefright漏洞——POC與EXP
- 資料結構 - 樹,再探資料結構
- 再探go modules:使用與細節Go
- 遊戲巨頭“再探”3A遊戲
- 深入探討Function Calling:實現外部函式呼叫的工作原理Function函式
- 別再說SUM函式很簡單,進來看看吧!函式
- OpenResty學習筆記03:再探WAFREST筆記
- 資料結構 - 雜湊表,再探資料結構
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- ClickHouse原始碼筆記5:聚合函式的原始碼再梳理原始碼筆記函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- (譯) 函式式 JS #2: 函式!函式JS
- 核函式 多項式核函式 高斯核函式(常用)函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 再探.NET的PE檔案結構(安全篇)
- 再探堆疊欺騙之動態欺騙
- main函式的入口函式AI函式
- SQL-函式 - 聚合函式SQL函式
- 【每日函式】每日函式(2021.08.16)函式
- 【每日函式】每日函式(2021.08.10)函式
- 【每日函式】每日函式(2021.08.05)函式
- 【每日函式】每日函式(2021.08.06)函式
- 【每日函式】每日函式(2021.08.14)函式