JavaScript 中的 eval()
是一個全局函數,它接受一個字符串參數,并將其作為 JavaScript 代碼進行解析和執行;如果接收的不是一個字符串,則會將傳入的數據直接返回。
-
eval 的基本用法:
eval()
函數將傳入的字符串參數作為 JavaScript 代碼進行解析和執行。- 解析和執行過程發生在調用
eval()
的上下文中,并且可以訪問該上下文中的變量和函數。 eval()
執行完畢后,返回最后一個表達式的結果。
-
eval 的作用域:
eval()
在執行代碼時,會在當前作用域中(非自己的作用域)創建變量和函數,并且可以訪問和修改當前作用域中的變量。- 如果在
eval()
中定義了變量或函數,它們將在eval()
被調用的上下文中被創建,而不是全局作用域中。 - 在嚴格模式下,
eval()
默認在其自己的作用域中執行代碼,不會對周圍的作用域產生影響。
-
不推薦使用 eval
- eval是一個危險的函數,它使用與調用者相同的權限執行代碼。如果你用eval運行的字符串代碼被惡意方
(不懷好意的人)修改,您最終可能會在您的網頁/擴展程序的權限下,在用戶計算機上運惡意代碼。(不
安全) - eval 通常比其他替代方法更慢,因為它必須調用 js 解釋器,而許多其他結構則可被現代5引擎進行優化。使用 eval 往往比普通JavaScript代碼慢幾個數量級。(性能不好)
- 產生混亂的代碼邏輯
以下是 eval()
的示例代碼:
const x = 10;
const y = 20;
const code = "console.log(x + y)";eval(code); // 輸出: 30eval("var z = x + y; console.log(z)"); // 輸出: 30
console.log(z); // 輸出: 30,因為在全局作用域中創建了變量 z