定義:eval函數可計算某個字符串,並執行其中的JavaScript代碼
語法:eval(string):string是必須的,要計算的字符串,其中含有要計算的JavaScript表達式或要執行的語句,返回通過計算string的值
注意點:覆蓋eval屬性或者將eval()方法賦予另一個屬性,並通過該屬性調用它,則ECMAScript實現允許拋出一個EvalError異常
以上是W3School中對eval函數的解釋,在之前我使用eval主要是在獲取後臺傳到前臺的數據之後將json string轉爲js對象,後來使用JSON.parse(JSON對象解析),便再也沒有接觸eval,也就沒有去深究eval的原理與作用。昨天學習執行上下文的時候,在湯姆大叔的博客中發現了eval不一樣的一面。
eval有個概念:調用上下文。它使用了調用它的變量作用於環境,如果一個函數定義了局部變量x,然後調用了eval(“x”),將會返回局部變量的值,如果調eval(“x=1”),會改變局部變量的值,同樣它可以用來聲明一個新的局部變量,聲明一個局部函數。
eval不在函數內部,調用上下文後,會把變量放在全局上下文中;
eval在函數內部,調用上下文後,會把變量放在局部上下文中,而這個局部上下文會隨着函數退出而銷燬。