आपको जो मिलता है वह है [डेटा, प्रकार] और दो और तर्कों का उपयोग नहीं किया जा रहा है। प्रत्येक शिफ्ट से पहले और बाद में एक console.log जोड़ें और आप देखेंगे कि क्या होता है;
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)
क्या इससे मदद मिलती है?
स्रोत
2015-05-26 13:09:22
उनके बीच का रिश्ता लाइव है ... समाधान एक अलग सरणी का उपयोग करना है जैसे 'var arr = [] .slice.call (तर्क) 'फिर' shift.call (arr) ' –
मुझे कनेक्शन के बारे में पता है:) मैं दिलचस्पी क्यों अंत में यह अपरिभाषित नहीं है, लेकिन 3 – dimko1
क्योंकि जब आप औपचारिक पैरामीटर सूची में सभी मूल्यों की स्थिति शिफ्ट फोन बदल जाता है –