2014-10-31 45 views
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); 
    }; 
}; 
+2

它基本上只是返回的副本数组。在这种情况下,它看起来不是必需的,因为'map'返回无论如何,一个新的阵列。 – 2014-10-31 15:36:59

回答

1

.slice方法拷贝/克隆数组你通常会做这个,如果你不希望修改原始。阵列。看着你的榜样,但是,我不认为你甚至需要使用.slice克隆方法,因为.map已经返回一个新的数组。

Here is a link to more information about cloning arrays

相关问题