نطاق الوظائف وهذا الإشارة هي أجزاء مهمة للغاية من JS. يتطلب الأمر منطقًا لتوضيح هذا الشيء ومعرفة كيف يكون منطقي ...
فيما يلي مخطط تفصيلي يمكنك تحديد العناصر التي تهتم بها مباشرة.
• طريقة تعريف الوظيفة: التعريف المباشر (ضمن النافذة ، التعريف الداخلي) ، طرق الكائن ، طرق النموذج الأولي للكائن ؛
• طريقة استدعاء الوظيفة: اتصل مباشرة ، اتصل/التقديم ، مع
• لطرق الوظائف والكائنات المحددة مباشرة ، يكون النطاق هو سلسلة النطاق في تعريفها افتراضيًا.
• للوظائف المحددة مباشرة ، هذا يشير إلى النافذة.
• بالنسبة لطريقة الكائن ، يشير هذا إلى الكائن الذي تم إنشاءه (المقابل للحالة التي يقوم فيها الكائن الذي تم إنشاءه بإرجاع هذا بشكل افتراضي).
• استخدم الاتصال/تطبيق لتغيير هذا الإشارة للطريقة
• عند تحديد وظيفة أو طريقة ، يمكن تغيير سلسلة النطاق الخاصة بها.
دعنا نتحدث عن ذلك بالتفصيل أدناه:
يمكن تقسيم تعريف الوظائف ، كما هو مذكور في المخطط التفصيلي ، إلى نوعين: التعريف المباشر (تحت النافذة ، التعريف الداخلي) ، طرق الكائن (أو طرق النموذج الأولي للكائن). من رمز المثال التالي ، يمكنك أن ترى أن الدالة FN1 و FN2 وطريقة dofunction للكائن هي من المجال المقابل عندما تستخدم الوظيفة الاسم.
var name = 'name under window <br/>' ؛ var resultcon ؛ function fn1 () {resultcon.innerhtml += name ؛} function myobj () {var name = 'name under myobj <br/>' ؛ this.dofunction = function () {resultcon.innerhtml += name ؛ماذا يحدث إذا تم استبدال "الاسم" بـ "this.name" عند استخدام قيمة الاسم؟ انظر المثال التالي:
var name = 'name under window <br/>' ؛ var resultcon ؛ function fn1 () {resultCon.innerHtml += this.name ؛} function myobj () {var name = 'name under myobj <br/>' ؛ this.dofunction = function () {resultCon.innerhtml += this.name ؛انطلاقًا من النتائج ، يمكننا التحقق من العناصر الرابعة والخامسة في المخطط التفصيلي. يمكننا أيضًا أن نرى أن هذا ونطاقه هما مجموعتان منفصلتان من السلاسل ، بعد منطق استعلام متغير مستقل. سيتم ذكر منطق الاستعلام المحدد في تحليل الأداء التالي. إذا كنت مبتدئًا ، فمن المستحسن أولاً إلقاء نظرة على المعرفة الأساسية لـ "سلسلة نطاق JS".
فيما يتعلق بأسلوب استدعاء الوظيفة ، أستخدم المثال التالي لتوضيح المقال الثاني والسادس في المخطط التفصيلي:
var name = 'name under window <br/>' ؛ var resultcon ؛ function fn1 () {resultCon.innerHtml += this.name ؛} function myobj () {var name = 'name under myobj <br/>' ؛ this.dofunction = function () {resultCon.innerhtml += this.name ؛استخدام المكالمات والتطبيق عند الاتصال هو تغيير هذا الإشارة للوظيفة المدعوة. استخدام مع هو تغيير مجال الاستعلام للمتغير في الدالة المدعو. نقوم بإزالة المكالمة والاسم في المثال أعلاه ونضيف معها لإظهار وظيفة مع.
var name = 'name under window <br/>' ؛ var resultcon ؛ function fn1 (myscope) {with (myscope) {resultCon.innerhtml += name ؛ }} وظيفة myobj (myscope) {var name = 'name under myobj <br/>' ؛إنه ليس مناسبًا للاستخدام مع ، وتحتاج إلى إضافته إلى الوظيفة المدعومة. قد يتساءل بعض الأشخاص عما إذا كان يمكنك الاتصال بما يلي لتغيير نطاق المتغير ككل دون تغيير الوظيفة المدعومة؟
مع (myscope) {fn1 () ؛ fn2 () ؛ var obj = new myobj () ؛ obj.dofunction () ؛}لسوء الحظ ، لا! لذلك ، يمكن استخدام الاتصال والتطبيق في كل مكان في بعض الأطر الناضجة ، ولكن نادراً ما يتم استخدامه. عند استخدام JShint للكشف عن بناء جملة JS ، يتم تمييز النقاط الحمراء الصغيرة مع. في بعض إرشادات تشفير JS ، يوصى أيضًا باستخدامه بأقل قدر ممكن ، لأنه مع التغييرات في سلسلة المتغيرات الافتراضية ، سوف يخلط بين موظفي الصيانة اللاحقين ، وبعض اعتبارات الأداء. يرجى استخدام مع مع مع مع الحذر.
تتفهم المقالة أعلاه بعمق النطاق ، وهذا الاتجاه من وظائف JS هو كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.