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]');
}
此功能与新功能之间的最大区别在于,该功能没有词法范围。因此,它将无法访问闭包变量,而我的将无法访问。