偽裝的 eval
安全問題
結論
eval 函數會在當前作用域字串中執行一段 JavaScript 程式碼
eval 函數會在目前作用域字串中執行一段 JavaScript 程式碼eval 函數會在目前作用域字串中執行一段 JavaScript 程式碼
eval 函數會在目前作用域字串中執行一段 JavaScript 程式碼。var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1
var foo = 1; function test() { var foo = 2; var bar = eval; bar('foo = 3'); return foo; } test(); // 2 foo; // 3
// 写法一:直接调用全局作用域下的 foo 变量 var foo = 1; function test() { var foo = 2; window.foo = 3; return foo; } test(); // 2 foo; // 3 // 写法二:使用 call 函数修改 eval 执行的上下文为全局作用域 var foo = 1; function test() { var foo = 2; eval.call(window, 'foo = 3'); return foo; } test(); // 2 foo; // 3
eval 也存在安全問題,因為它會執行任意傳給它的程式碼, 在程式碼字串未知或是來自一個不信任的來源時,絕對不要使用 eval 函式。