0
我发现在示例代码下面的模式从Ch 11 of Eloquent Javascript:为什么要从头到尾对数组进行切片?
array.slice(0, array.length - 1)
我的问题是为什么你会从切开它的一个数组的开始到结束?
这里是我找到该模式的示例代码。见右图中间的argNames
声明(我包括一个-->
在有问题的行:
specialForms["fun"] = function(args, env) {
if (!args.length)
throw new SyntaxError("Functions need a body");
function name(expr) {
if (expr.type != "word")
throw new SyntaxError("Arg names must be words");
return expr.name;
}
-->var argNames = args.slice(0, args.length - 1).map(name);
var body = args[args.length - 1];
return function() {
if (arguments.length != argNames.length)
throw new TypeError("Wrong number of arguments");
var localEnv = Object.create(env);
for (var i = 0; i < arguments.length; i++)
localEnv[argNames[i]] = arguments[i];
return evaluate(body, localEnv);
};
};
它基本上只是返回的副本数组。在这种情况下,它看起来不是必需的,因为'map'返回无论如何,一个新的阵列。 – 2014-10-31 15:36:59