هذا البحث والاختبار الأعمى وغير المبدئي هو الذي جعلني باهتة. هل من الضروري القيام بذلك؟ في الواقع ، ليست هناك حاجة لإجراء العديد من الاختبارات بعد فهم المبادئ ، ثم رسم القواعد. تم تعريف قواعد ECMASCRIPT.
قاعدة VAR هي: استخدم VAR لإعلان متغير داخلي ، وإلا فإنه هو استدعاء المتغير العالمي أولاً ، بغض النظر عن عدد طبقات الوظائف.
قاعدة هذا هي: هذا في وظيفة الطريقة يشير دائمًا إلى نفسها ، وهذا في الوظيفة العادية يشير دائمًا إلى Domwindow.
// goddamntest1function foo () {var a = 123 ؛ // المتغير المحلي ، المتغيرات العالمية لجميع الوظائف الفرعية this.a = 456 ؛ Property // Object (function () {Alert (a) ؛ // 123 ، Global Alert (this.a) ؛ // undefined ، function ، هذه النقطة إلى domwindow}) () ؛ } var f = new foo () ؛ // goddamntest2function foo () {var a = 123 ؛ this.a = 456 ؛ (الوظيفة (أ) {// تنبيه الإعلان المحلي (A) ؛ // 456 ، يتم تجاوز العالم من خلال إعلان محليًا بواسطة الوظيفة}) (this.a) ؛ } var f = new foo () ؛ // goddamntest3function foo () {var a = 123 ؛ this.a = 456 ؛ (function () {Alert (a) ؛ // 123 ، Global Alert (this.a) ؛ // undefined ، domwindow this.b = 789 ؛ // window.b = 789}) () ؛ (function () {Alert (this.b) ؛ // 789 ، window.b}) () ؛ } var f = new foo () ؛ (function () {Alert (this.b) ؛ // 789 ، window.b}) () ؛ // goddamntest4function foo () {(function () {this.b = 789 ؛ // window.b = 789}) () ؛ (function () {Alert (this.b) ؛ // 789 ، window.bvar b = 0 ؛ Alert (b) ؛ // 0 ، لقد تمت كتابة هذا الاختبار!}) () ؛ } var f = new foo () ؛ (function () {Alert (this.b) ؛ // 789 ، window.balert (b) ؛ // 789 ، window.b}) () ؛والمثير للدهشة أن التنبيه الأخير (ب) لا يزال ينتج عنه 789. // لا مفاجأة لعنة على الإطلاق!
// goddamntest5function foo () {(function () {this.b = 789 ؛ // window.b = 789}) () ؛ (function () {Alert (this.b) ؛ // 789 ، window.balert (b) ؛ // undefined ، global var b = 0 ؛ alert (b) ؛ // 0 ، هناك أيضًا اختبار!}) () ؛ } var f = new foo () ؛ (function () {Alert (this.b) ؛ // 789 ، window.balert (b) ؛ // 789 ، window.b}) () ؛ملاحظة: طريقة JS لحذف المتغيرات المحلية
ALERT ('value:'+str+'/ttype:'+typeof (str)) // قبل الإعلان عن المتغير ، راجع var str = "dd" ؛ تنبيه ('value:'+str+'/ttype:'+typeof (str)) // بعد إعلان المتغير وتعيينه ، راجع str = undefed ؛ // حذف تنبيه المتغير المحلي ('القيمة:'+str+'/ttype:'+typeof (str)) // بعد إلغاء المتغير ، راجع str = غير محدد ، مثل أول واحدما سبق هو أحدث تحليل للمتغيرات العالمية JS والمتغيرات المحلية التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!