new Function
创建一个可以重用的函数。eval
只执行给定的字符串并返回最后一条语句的结果。当您试图创建一个使用 Function 来模拟 eval 的包装函数时,您的问题被误导了。
他们在幕后共享一些代码是真的吗?是的,很有可能。完全一样的代码?不,当然。
为了好玩,这是我自己使用 eval 创建函数的不完美实现。希望它能揭示一些不同之处!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
// Creates the anonymous function to be returned
// The following line doesn't work in IE
// return eval('(function (' + params.join(',')+ '){' + code + '})');
// This does though
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
this 和 new Function 的最大区别在于 Function 没有词法作用域。所以它不能访问闭包变量,而我的可以。