eval 和 function 的区别
Function 的安全性更高。例如在具备模块化开发环境的 Vue 或者 React 项目中,开发者可能习惯性的在文件顶部使用 var 进行变量声明,此时变量被声明在模块的作用域内,而不是全局的作用域(不会被添加到 window 上),因此代码在模块化的环境中使用 Function 执行会报错,而 eval 不会。
当然也可以使得 eval 在全局作用域内生效,例如:
var world = 10;
function createFunction2() {
var world = 20;
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval
// 使用间接调用 (0,eval) 或者 var geval = eval; 可以达到相同的效果
return window.eval('world;'); // 这里的 world 指向全局作用域内的 world
}
console.log(createFunction2()); // 10