2014-10-31 48 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

相關問題