为什么使用Function构造函数创建的Javascript函数无法访问其外部定义的其他函数?

Jar*_*nal 4 javascript function

请参阅下面的代码.为什么不会test2()导致错误test1()?如何避免错误(无需在构造函数中重新定义被调用的函数)?

function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
var xyz = function (){
                var test1 = function () { getRandomInt(10, 20); };
                test1();  // runs with out problem 
                var test2 = new Function('getRandomInt(10, 20);');
                test2(); //results in "Uncaught ReferenceError: getRandomInt is not defined"
                };
Run Code Online (Sandbox Code Playgroud)

bfa*_*tto 5

我假设所有这些都在另一个函数内(IIFE,也许?).创建的代码new Function在全局范围内进行评估,似乎getRandomInt在那里不可用.

在jsfiddle上检查这些演示:如果解包,它可以工作,但不能在IIFE内部工作.

如果需要在当前范围内评估代码,则必须使用eval:

var test2 = eval('(function(){return getRandomInt(10, 20);})');
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/7wPK4/2/

参考