Es esta investigación y pruebas ciegas y sin principios lo que me hizo desmayar. ¿Es necesario hacer esto? De hecho, no hay necesidad de hacer tantas pruebas después de comprender los principios y luego dibujar las reglas. Se han definido las reglas de ECMAScript.
La regla de VAR es: use VAR para declarar una variable que es una variable interna, de lo contrario es llamar primero a la variable global, sin importar cuántas capas de funciones sean.
La regla de esto es: esto en la función del método siempre apunta a sí misma, y esto en la función ordinaria siempre apunta a domwindow.
// goddamntest1function foo () {var a = 123; // variables locales, variables globales de todas las subfunciones esto. A = 456; // Propiedad de objeto (function () {alert (a); // 123, alerta global (this.a); // función indefinida, normal, este punto a domwindow}) (); } var f = new foo (); // goddamntest2function foo () {var a = 123; esto.a = 456; (función (a) {// alerta de declaración local (a); // 456, el global se anula por un declarado localmente por la función}) (this.a); } var f = new foo (); // goddamntest3function foo () {var a = 123; esto.a = 456; (function () {alert (a); // 123, alerta global (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; alerta (b); // 0, dicha prueba se ha escrito!}) (); } var f = new foo (); (function () {alerta (this.b); // 789, Window.balert (b); // 789, Window.b}) ();Sorprendentemente, la última alerta (b) todavía resultó en 789. // ¡No hay maldita sorpresa en absoluto!
// goddamntest5function foo () {(function () {this.b = 789; // window.b = 789}) (); (function () {alert (this.b); // 789, Window.balert (b); // Undefinado, global var b = 0; alerta (b); // 0, también hay dicha prueba!}) (); } var f = new foo (); (function () {alerta (this.b); // 789, Window.balert (b); // 789, Window.b}) ();PS: Método JS para eliminar variables locales
alert ('valor:'+str+'/ttype:'+typeof (str)) // Antes de declarar la variable, consulte VAR Str = "DD"; Alert ('Valor:'+Str+'/TType:'+typeof (Str)) // Después de declarar y asignar la variable, referirse a Str = Undefinado; // Eliminar la alerta de variable local ('valor:'+str+'/ttype:'+typeof (str)) // Después de cancelar la variable, consulte str = indefinido, igual que el primeroLo anterior es el último análisis de las variables globales JS y las variables locales presentadas por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!