La función es el concepto más utilizado en JavaScript. La función en JavaScript es la función más fácil de comenzar, pero también es el concepto más difícil de entender y dominar en JavaScript.
1. El tipo de función es uno de los tipos de referencia en JS. Cada función es en realidad un objeto de instancia de tipo de función, con sus propias propiedades y métodos. Debido al objeto funcional, el nombre de la función es en realidad un puntero al objeto de función.
2. Métodos de definición de funciones comúnmente utilizados
1. Declaración de funciones:
función suma (a, b) {return a+b;}2. Expresión:
var sum = function () {return a+b; }; // Tenga en cuenta el semicolon // La diferencia entre los dos métodos: // El intérprete será el primero en leer la declaración de función y hacerlo accesible antes de la ejecución. Al usar una expresión, debe esperar hasta que el analizador se ejecute a la línea de código donde se encuentra antes de que se interprete y ejecute (se avanza la declaración variable, mientras que el valor se deja en su lugar) alerta (suma (10, 10)); Función Sum (a, b) {return a+b;} // ↑ El código anterior se ejecutará normalmente, porque antes de ejecutar el código, el analizador se promovirá mediante la declaración de función, leer y agregar la declaración de función al entorno de ejecución, y colocarlo en la parte superior de la alerta del árbol del código (suma de typeof); alerta (suma (10, 10)); var sum = function (a, b) {return a+b;} // ↑ La razón es que la función se encuentra en una declaración de inicialización, no una declaración de función, y no se avanzará, pero solo avanzará la suma var y usará el operador de tipos para mostrar que la suma no está definida, por lo que el error se informa.3. El nombre de la función solo contiene un puntero a un objeto de función, por lo que el nombre de la función no es diferente de otras variables que contienen el puntero del objeto, es decir, un objeto de función puede tener múltiples nombres:
función suma (a, b) {return a+b;} console.log (suma (2, 3)); // 5var anothersum = suma; // variable anothersum también apunta a la misma función console de objetos.log (anothersum (4, 5)); // 9sum = nulo; // La variable de suma ya no guarda punteros a la función de objeto console.log (anothersum (1, 3)); // La variable anothersum todavía se puede llamar4. ¿Por qué JS no sobrecarga el concepto?
function add (a) {return a+3;} function add (a) {return a+5;} var result = add (3); // 8 // Las dos funciones tienen el mismo nombre, y el resultado solo puede ser la última función sobrescribe la anterior, por lo que no se puede volver a cargar5. Propiedades internas de una función: dentro de la función, hay dos objetos especiales, argumentos y esto
1. Argumentos:
Los argumentos son un objeto de matriz de la clase, que contiene todos los parámetros de la función entrante. Este objeto tiene un atributo llamado Callee. El valor de la propiedad es un puntero, que señala la función en sí que posee el objeto Argumentos.
función foo () {var a = arguments.callee; return a.ToString ();} foo ();/*return el resultado: "Función sum () {var a = arguments.callee; return a.ToString ();}" Es decir, dentro de una función, argumentos.callee se refiere a la función misma. Esta función es algo útil cuando se llama recursivamente, tiene muchos defectos y se elimina en el modo ES5 estricto*/2. Esto: En pocas palabras, esto se refiere al objeto de entorno en el que se ejecuta la función. Esto se refiere al objeto en el que se ejecuta el objeto. Es bastante complicado de expandir, solo un artículo
//HACER:
3. ES5 especifica otra propiedad de una función: la persona que llama. Esta propiedad de la función se refiere a la función que llama a la función actual.
function inner () {console.log (inner.caller);} function outer () {inner ();} outer (); // function outer () {inner ();}4. Atributo de longitud: indica el número de parámetros que la función quiere aceptar
función add (a, b, c) {return a+b+c;} add.length; // 35. El famoso atributo prototipo, en pocas palabras, es un objeto, un objeto creado llamando a un constructor, que contiene propiedades y métodos que pueden compartir por todas las instancias de un tipo específico. Es bastante complicado de expandir, solo un artículo
//HACER:
6. Dos métodos de la función: llamar () y aplicar (). Ambos llaman a la función en un alcance específico, y de hecho se establecen este valor dentro de la función.
1. Llame (): Similar al método Apply (), la diferencia es que el método de recepción de los parámetros es diferente, y los parámetros deben enumerarse uno por uno.
2. Aplicar (): recibe dos parámetros, uno es el alcance de la operación de función, y el otro es una matriz de parámetros, que puede ser una matriz o un objeto de matriz de la clase de argumentos.
función sum (a, b) {return a+b;} function llamesum (a, b) {return sum.Apply (this, argumentos);} // El segundo parámetro es un objeto de matriz, argumentos de la función de cala1 (a, b) {return sum.Apply (this, [a, b]);} // El segundo parámetro es un array.log (llamado (2, 3, 3)); // 5 console.log (Lessum1 (3, 5)); // 83. Los parámetros de aprobación y las funciones de llamadas no es el lugar donde se usan llamar () y aplicar (). Lo realmente poderoso de la operación de la función de expansión es el alcance de
var color = 'rojo'; var obj = {color: 'azul'} function foo () {console.log (this.color); } foo (); //'red'foo.call(this) ;//'Red'foo.call(obj); // 'azul' // El entorno de ejecución de la última llamada a la función foo () ha cambiado, y esto apunta al objeto OBJ, por lo que es 'azul'La mayor ventaja de usar llamadas () y aplicar () para expandir el alcance es desacoplar objetos y métodos
4. ES5 define un nuevo método: bind (), que devuelve una función, en la que este valor estará vinculado al valor pasado a la función bind ().
var x = 9; var módulo = {x: 81, getx: function () {return this.x; }}; module.getx (); // 81Var Remievex = Module.getx; Remievex (); // 9, porque en este caso, "esto" apunta a la variable global var boundgetx = RomEx.Bind (módulo); // unir esto en la función Remievex () al módulo para siempre, y luego llamar a esta función para ejecutar siempre un límitegetx () en el objeto del módulo; // 81Lo anterior es un análisis en profundidad de los tipos de funciones en JavaScript introducido por el editor. Espero que te sea útil. Si desea saber más, preste atención a Wulin.com.