यह उनका कहना है वहाँ console.log
के कार्यान्वयन में व्यवहार में एक फर्क है कि लायक है। नोड v0.10.19 के तहत आपको कोई त्रुटि नहीं मिलती है; आप बस इस देखें:
> [1,2,3,4,5].forEach(console.log);
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
इसका कारण यह है forEach
को कॉलबैक एक तीन पैरामीटर समारोह मूल्य सूचकांक और सरणी ही ले जा रहा है। फ़ंक्शन console.log
उन तीन पैरामीटर को देखता है और कर्तव्यपूर्वक उन्हें लॉग करता है।
क्रोम ब्राउज़र कंसोल के तहत, हालांकि, आप मिल
> [1,2,3,4,5].forEach(console.log);
TypeError: Illegal invocation
और इस मामले में, bind
होगा काम:
> [1,2,3,4,5].forEach(console.log.bind(console));
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
लेकिन वहाँ एक वैकल्पिक तरीका है: ध्यान दें कि forEach
पर दूसरा पैरामीटर कॉलबैक में उपयोग करने के लिए this
का मान लेता है:
> [1,2,3,4,5].forEach(console.log, console)
1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]
जो क्रोम कंसोल और मेरे लिए नोड में काम करता है। बेशक, मुझे यकीन है कि आप क्या चाहते हैं सिर्फ मूल्यों है हूँ, इसलिए मुझे डर है कि सबसे अच्छा समाधान है, वास्तव में कर रहा हूँ:
> [1,2,3,4,5].forEach(function (e) {console.log(e)});
1
2
3
4
5
चाहे नोड के व्यवहार एक बग है, या यह बस का लाभ लेता है तथ्य यह है कि console.log
ईसीएमए द्वारा निर्दिष्ट नहीं है अपने अधिकार में दिलचस्प है।लेकिन अलग-अलग व्यवहार, और तथ्य यह है कि आपको यह पता होना चाहिए कि आपकी कॉलबैक this
का उपयोग करती है या नहीं, इसका मतलब है कि हमें सीधे कोडिंग पर वापस जाना होगा, भले ही यह function
कीवर्ड के लिए वर्बोज़ धन्यवाद हो।
आपके पास गलत 'यह' है। वास्तव में – SLaks
। मैं इसे जवाब दूंगा, मैं इतना मूर्ख हूं –
क्या इसे अभी हटाया जा सकता है? यह वास्तव में उपयोगी नहीं है =/ –