যদিও প্রত্যেকে " না " এর উত্তর দেয় এবং আমি জানি যে "না" সঠিক উত্তর তবে আপনার যদি সত্যিই কোনও ফাংশনের স্থানীয় ভেরিয়েবলগুলি গ্রহণ করতে হয় তবে একটি সীমাবদ্ধ উপায় রয়েছে।
এই ফাংশনটি বিবেচনা করুন:
var f = function() {
var x = 0;
console.log(x);
};
আপনি আপনার ফাংশনটিকে স্ট্রিংয়ে রূপান্তর করতে পারেন:
var s = f + '';
আপনি একটি স্ট্রিং হিসাবে ফাংশন উত্স পাবেন
'function () {\nvar x = 0;\nconsole.log(x);\n}'
ফাংশন কোডটি পার্স করতে এবং স্থানীয় ভেরিয়েবলের ঘোষণার সন্ধান করতে এখন আপনি এসপ্রিমার মতো পার্সার ব্যবহার করতে পারেন ।
var s = 'function () {\nvar x = 0;\nconsole.log(x);\n}';
s = s.slice(12); // to remove "function () "
var esprima = require('esprima');
var result = esprima.parse(s);
এবং এর সাথে অবজেক্টগুলি সন্ধান করুন:
obj.type == "VariableDeclaration"
ফলাফলে (আমি console.log(x)নীচে সরিয়েছি ):
{
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "x"
},
"init": {
"type": "Literal",
"value": 0,
"raw": "0"
}
}
],
"kind": "var"
}
]
}
আমি এটি ক্রোম, ফায়ারফক্স এবং নোডে পরীক্ষা করেছি।
তবে এই পদ্ধতির সমস্যাটি হ'ল আপনার কেবলমাত্র ফাংশনেই ভেরিয়েবলগুলি সংজ্ঞায়িত করা হয়েছে। উদাহরণস্বরূপ এটির জন্য:
var g = function() {
var y = 0;
var f = function() {
var x = 0;
console.log(x);
};
}
আপনি কেবল এক্স এর অ্যাক্সেস পেয়েছেন এবং y নয় । কলর ফাংশনগুলির স্থানীয় ভেরিয়েবলগুলি খুঁজে পেতে তবে আপনি একটি লুপে কলারের চেইনগুলি (আর্গুমেন্টস ক্যাল্লেক্যালার.ক্যালারক্যালার কলার ) ব্যবহার করতে পারেন । আপনার যদি সমস্ত স্থানীয় ভেরিয়েবলের নাম থাকে তবে আপনার স্কোপ ভেরিয়েবল রয়েছে । পরিবর্তনশীল নামগুলির সাথে আপনার একটি সাধারণ ইওল সহ মানগুলিতে অ্যাক্সেস থাকে।