Mengakses Pembolehubah Dalam Skop
Dalam JavaScript, mendapatkan semua pembolehubah dalam skop semasa secara amnya tidak boleh dilaksanakan. Walau bagaimanapun, dalam senario tertentu, adalah mungkin untuk mendapatkan semula pembolehubah tempatan yang ditakrifkan dalam fungsi tertentu.
Pertimbangkan fungsi berikut:
var f = function () { var x = 0; console.log(x); };
Untuk mengekstrak pembolehubah tempatan daripada fungsi ini, anda boleh menukarnya kepada rentetan:
var s = f + ''; // Output: 'function () {\nvar x = 0;\nconsole.log(x);\n}'
Menggunakan alat penghuraian seperti Esprima, anda boleh menganalisis kod fungsi dan mengenal pasti setempat pengisytiharan pembolehubah:
s = s.slice(12); // Remove 'function () ' var result = esprima.parse(s); // Filter for VariableDeclaration objects var variables = result.body.filter(function (obj) { return obj.type === 'VariableDeclaration'; });
Ini akan menyediakan tatasusunan objek yang mengandungi nama pembolehubah yang diisytiharkan dan nilainya. Walau bagaimanapun, kaedah ini terhad kepada mengekstrak pembolehubah tempatan yang ditakrifkan dalam fungsi itu sendiri.
Dalam situasi di mana fungsi bersarang wujud, mengakses pembolehubah tempatan fungsi induk tidak dapat dilakukan secara langsung. Walau bagaimanapun, anda boleh menggunakan sifat pemanggil (cth., arguments.callee.caller.caller.caller) untuk merentasi timbunan panggilan dan secara beransur-ansur mengumpulkan nama pembolehubah.
Walaupun teknik ini membenarkan akses kepada skop di luar semasa fungsi, adalah penting untuk mengenali batasannya. Keupayaan untuk mendapatkan semula pembolehubah merentas sempadan skop tidak wujud dalam JavaScript dan memerlukan strategi khusus seperti yang diterangkan di atas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Pembolehubah JavaScript Tempatan Merentasi Skop Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!