Quello che ottieni è un array di argomenti con [data, type] e altri due argomenti non utilizzati. Aggiungi un console.log prima e dopo ogni turno e vedrai cosa succede;
var shift = [].shift;
console.log("args", arguments)
console.log(data, type);
// Outputs [1, 'test', 2, 3] => data = 1, type = 'test'
shift.call(arguments);
console.log("args", arguments)
console.log(data, type);
// Outputs ['test', 2, 3] => data = 'test', type = 2
shift.call(arguments);
console.log("args", arguments)
console.log(data, type);
// Outputs [2, 3] => data = 2, type = 3
shift.call(arguments);
console.log("args", arguments)
console.log(data, type);
// Outputs [3] => data = 3, type = 3 (type is keeping it's old value)
shift.call(arguments);
console.log("args", arguments)
console.log(data, type);
// Outputs [] => data = 3, type = 3 (both are keeping their old value)
Questo aiuto?
fonte
2015-05-26 13:09:22
La relazione tra di loro è attiva ... la soluzione è utilizzare un array separato come 'var arr = [] .slice.call (argomenti)' then 'shift.call (arr)' –
So di connessione:) Sono interessato perché alla fine non è indefinito ma 3 – dimko1
perché quando si chiama shift la posizione di tutti i valori nell'elenco dei parametri formale cambia –