2017-12-14 101 views
6

ही नाम के साथ एक चर का उपयोग करके डिफ़ॉल्ट मान निर्दिष्ट करके एक संदर्भ त्रुटि फेंक:जे एस डिफ़ॉल्ट तर्क मूल्य: क्यों अलग हो पहचानकर्ता चाहिए?

var a = 'adef'; 
var x = (a=a) => console.log(a); 
x(); 
=> "ReferenceError: a is not defined" 

लेकिन यह ठीक है:

var other = 'otherdef'; 
var x = (a=other) => console.log(a); 
x(); 
=> "otherdef" 

मेरे धारणा यह थी कि बाहरी दायरे में a का मूल्य होगा नए दायरे को सौंपा जाना चाहिए।

मैं का उपयोग कर var के बजाय const की कोशिश की है, और एक तीर-समारोह के बजाय class/function, लेकिन परिणाम हमेशा एक ही है (क्रोम 63 और नोड 6 में परीक्षण किया गया)।

मैं एक महसूस कर रही मुद्दा है कि a काम के दौरान 'फहराया' और इतने काम (जो मौजूद है, लेकिन अपरिभाषित है) नई 'एक' की चर्चा करते हुए है ...

+0

हाँ, 'A' वास्तव में [फहराया] है (https://stackoverflow.com/q/31219420/1048572) [पैरामीटर गुंजाइश] में (https://stackoverflow.com/q/44896829/1048572) – Bergi

उत्तर

0

इस व्यवहार का उद्देश्य

var a = 2; 
var x = (a, b = a) => console.log(a, b); 
x(42); // 42 42 

बनाना विशेष मामला a = a काम अलग ढंग से किया जा सकता है लेकिन यह है कि यह मुश्किल कार्यों कि इस का उपयोग refactor करने के लिए होगा: एक पैरामीटर एक और पैरामीटर का मान करने के लिए डिफ़ॉल्ट-प्रारंभ करने के लिए, उदाहरण के लिए अनुमति देने के लिए है व्यवहार (आप किराए पर नहीं ले पाएंगे भी चर है कि उस पर निर्भर करता है) का नाम बदलने के बिना पैरामीटर a ame।

संबंधित मुद्दे