var Circle = function() {
var pi = function(){
return '3.14159';
};
this.area = function( str) {
console.log(eval(str)()); //能正确调用
//提示pi is not defined,该如何调用??
console.log(new Function('return '+str).call());
};
}
var c= new Circle();
c.area('pi');
原因:通过
new Function
生成的函数对象的外部词法环境是全局环境,而不是包裹它的那个函数的词法环境。所以它不能访问到外层函数(以及外层函数的外层函数)中定义的变量。15.3.2.1 new Function
换句话说,它的“作用域链”绕过了外层的n层函数,直接链接到了全局作用域。