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