क्लोजर का मतलब है कि जब आप "तुलना" कहते हैं तो आपको बहुत सावधान रहना होगा। उदाहरण के लिए:
function closure(v) { return function(){return v} };
a = closure('a'); b = closure('b');
[a(), b()]; // ["a", "b"]
// Now, are a and b the same function?
// In one sense they're the same:
a.toString() === b.toString(); // true
// In another sense they're different:
a() === b(); // false
फ़ंक्शन के बाहर पहुंचने की क्षमता का अर्थ है कि सामान्य अर्थ में, कार्यों की तुलना करना असंभव है।
हालांकि, व्यावहारिक अर्थ में आप एस्प्रिमा या एकोर्न जैसे जावास्क्रिप्ट पार्सिंग पुस्तकालयों के साथ बहुत लंबा रास्ता प्राप्त कर सकते हैं। ये आपको "सार सिंटेक्स ट्री" (एएसटी) बनाने देते हैं, जो आपके प्रोग्राम का JSON विवरण है। यह डेटा के रूप में जावास्क्रिप्ट समारोह है - उदाहरण के लिए, ast अपने return 1
कार्यों इस
ast = acorn.parse('return 1', {allowReturnOutsideFunction:true});
console.log(JSON.stringify(ast), null, 2)
{
"body": [
{
"argument": {
"value": 1, // <- the 1 in 'return 1'
"raw": "1",
"type": "Literal"
},
"type": "ReturnStatement" // <- the 'return' in 'return 1'
}
],
"type": "Program"
}
// Elided for clarity - you don't care about source positions
एएसटी सभी जानकारी की तुलना करने की जरूरत है की तरह लग रहा है। आप अपनी जरूरतों के आधार पर परिवर्तनीय नामों को सामान्य कर सकते हैं, बंद करने की जांच कर सकते हैं, तारीखों को अनदेखा कर सकते हैं।
प्रक्रिया को सरल बनाने में सहायता के लिए उपकरण और पुस्तकालयों का एक समूह है, लेकिन फिर भी, यह बहुत काम होने की संभावना है और शायद व्यावहारिक नहीं है, लेकिन यह अधिकतर संभव है। स्ट्रिंग के लिए
स्रोत
2015-08-18 00:39:08
वह जावास्क्रिप्ट एक वाक्यविन्यास त्रुटि पर भी विश्लेषण नहीं करेगा ... लेकिन, "तुलना" से आपका क्या मतलब है? विभिन्न ब्राउज़र फ़ंक्शन-ऑब्जेक्ट्स पर अलग-अलग "toString" का समर्थन करते हैं, ताकि आपके मामले में काम हो सके। (लेकिन इस में नहीं क्योंकि यह पार्स नहीं करेगा इसलिए 'ए' या 'बी' को असाइन नहीं किया गया है)। मुझे यह भी लगता है कि जावास्क्रिप्ट [स्क्रिप्ट ब्लॉक में] पर "प्रतिबिंबित" करने के लिए कुछ पुस्तकालय हैं। –
चूंकि सबकुछ जेएस में एक वस्तु है - आप शायद ऑब्जेक्ट तुलना की तरह smth खोजने की कोशिश कर सकते हैं (http://stackoverflow.com/questions/1068834/object-comparison-in-javascript) – shershen