Resumen de habilidades avanzadas de js

----------------------------------- Resumen de habilidades avanzadas de JS ---------- - -------------------------

1. Precompilación del código js

Cuando el motor js ejecuta el código js, ​​primero se realizará un análisis previo y la declaración se mejorará durante el análisis previo, lo cual es un tema importante.

La función que promoverá el nombre de la variable var y la función, existen algunas precauciones al promover, var solo promueve el nombre de la función y la función promueve el nombre de la función y el valor almacenado en la función.

1) promoción de var, las variables sin var no se promocionarán

2) Hay una excepción cuando se promociona la función: en la nueva versión del navegador, si la función está en el condicional if, solo se promocionará el nombre de la función y no el valor de la función.

3) Cuando obtienes un fragmento de código js, ​​lo primero que debes pensar es en el análisis previo, que es la mejora de la declaración.

4) Cuando hay nombres de variables y nombres de funciones que deben promocionarse, generalmente no notará cuál se promociona primero

5) Cuando el nombre de la función y el nombre de la variable son iguales, primero se debe promover la declaración de la función y luego la declaración de la variable, esta última puede sobrescribir el nombre anterior, lo que puede considerarse innecesario. promover

Proceso de ejecución de Two.js

El proceso de ejecución de js: cuando el motor js comienza a ejecutar el código js, ​​se genera un contexto de ejecución global.

En el contexto de ejecución global: 1) elevación de declaraciones, 2) ejecución de código

Tenga en cuenta que el código se ejecuta de arriba a abajo (porque todas las tareas actuales son sincrónicas, de arriba a abajo), e ignórelo si se ha promocionado, por ejemplo, si el nombre de la variable se ha promocionado, se asignará directamente .Si es una función directamente Se ignora, ya que se promociona con el valor.

3) Cuando se llama a una función durante la ejecución del código. En este momento, se genera un contexto de ejecución local. 1) La asignación de parámetros formales, la asignación de parámetros formales se puede considerar directamente como una variable local declarada dentro de la función. 2) La promoción de la declaración, aquí preste atención a la promoción del nombre de la variable var, o el nombre y el valor de la función, que se promueve en la parte superior de la función. 3) La ejecución del código se ejecuta secuencialmente de arriba a abajo.

Tres: Notas sobre var let const y declaraciones de funciones

La diferencia entre var y no var:

En el ámbito global: tanto agregar var como no agregar var pueden considerarse como un atributo del objeto de ventana

En el ámbito global: se promoverá agregar var, no se promoverá no agregar var

En el ámbito local: no agregar var no se considerará una propiedad del objeto de ventana

Bajo alcance local: sin agregar var, solo puede ser una variable global, no una variable local

Las variables con var no se pueden eliminar, las variables sin var se pueden eliminar

Nota sobre let declarar variables:

Las variables declaradas con let no se pueden elevar

no se puede aplicar a las propiedades del objeto de Windows

No se puede reasignar, se informará un error

let {} formará un alcance a nivel de bloque, el alcance a nivel de bloque puede acceder al exterior y el exterior no puede acceder a los datos del alcance a nivel de bloque.

Nota sobre la constante:

Las variables declaradas usando const no se pueden reasignar, lo que equivale a declarar una constante.

El uso de const no puede agregar nombres de variables directamente a const, por lo que debe asignarse inmediatamente al declarar

ps: cuando estamos trabajando en un proyecto, damos prioridad al uso de const, si la variable necesita ser dinámica, entonces elegimos usar let y finalmente var.

4. Alcance y cadena de alcance

alcance:

El alcance en js se divide en alcance local y alcance global. Alcance local: cuando se declara una función, se genera un alcance local. El alcance fuera del alcance local es el alcance global. El alcance es Oh estático. Es diferente del contexto de ejecución local y del contexto de ejecución global, y el contexto solo está disponible en el momento de la ejecución.

Cadena de alcance:

El alcance en js se divide en alcance local y alcance global. Cuando se declara una función, se genera un alcance local.

El alcance local tiene un alcance superior y el alcance superior ve la declaración de la función.

Cuando se llama a una función, se genera un contexto de ejecución local y no existe ninguna relación entre el contexto local y el contexto de ejecución local.

Un contexto local hará tres cosas: asignación de parámetros, promoción de declaraciones y ejecución de código. Al acceder a una variable x en un contexto de ejecución local, primero búsquela en su propio alcance, si no puede encontrarla, vaya al nivel superior para buscarla, no solo un nivel, pero si no puede encontrarla Para ello, vaya al contexto de ejecución global.

Este proceso se denomina cadena de alcance, también conocido como mecanismo de búsqueda de alcance.

Pseudomatriz de cinco argumentos

argumentos es una pseudomatriz, que también se puede llamar pseudoclase. En una función, puede recibir los datos de los parámetros reales. La razón por la que se llama pseudomatriz es que tiene las características de una matriz, y la matriz se puede obtener mediante argumentos.longitud de longitud.

En esta matriz se puede entender que corresponden a los parámetros formales uno por uno, cuando el parámetro formal cambia, también cambia, y viceversa.

Si hay dos parámetros formales, corresponde a los dos primeros elementos de los argumentos.

Si hay demasiados parámetros reales para pasar, puede usar argumentos para recibirlos, según la situación.

Seis.IIEF

IIEF es una expresión de función de ejecución inmediata, lo que significa que no es necesario ejecutarla manualmente y será llamada por sí misma cuando se declare. Este problema se introdujo para proteger el interior de la función de la contaminación. Hay tres formas de ejecutar expresiones de funciones inmediatamente.

Hay tres formas:

Primera forma:

;(función(){})()

La segunda forma:

;(función(){}())

La tercera manera:

+función(){}();

- función(){}();

!función(){}();

~ función(){}();

7. Asignación y liberación de memoria de montón y pila, cierre

Asignación y liberación de memoria del montón:

Cuando un dato es un tipo de datos de referencia, se creará un espacio de montón en la memoria para almacenar el valor de los datos. Este objeto necesita una variable a la que hacer referencia. Si no hay ninguna variable para hacer referencia al espacio del montón, el El navegador utilizará el momento adecuado para publicarlo.

Asignación y liberación de memoria de pila global:

Cuando el código js comienza a ejecutarse, se genera una memoria de pila global.

Cuando se ejecuta el código js, ​​el espacio de la pila global se libera cuando se cierra la pestaña.

Asignación y liberación de espacio de pila local:

Durante la ejecución del código, llamar a una función crea una pila local. La pila local es protectora.

Liberar: cuando se ejecuta la función, el navegador liberará el espacio de la pila en el momento adecuado.

Cuando la función se llama a sí misma internamente, si no hay salida, seguirá abriendo espacio de pila local y finalmente explotará la pila, también llamada recursividad muerta.

Cierre: cuando finaliza la llamada a la función y hay otras variables que hacen referencia a esta dirección, este espacio de pila no se liberará y los datos que contiene se guardarán permanentemente, lo que crea un cierre, las ventajas del cierre Protege los datos en la función y extender el ciclo de vida de la variable. Contras: Pierde memoria.

Ocho Errores comunes en js

(1) let no se puede declarar repetidamente

(2) let y {} generarán un alcance a nivel de bloque

(3) El nombre de la variable declarada por let no se puede promocionar

(4) Las variables declaradas por let no pertenecen a las propiedades del objeto ventana

Nueve: Pequeños detalles en el proceso de ejecución del código.

Hay algunos problemas al usar var y no usar var con let. El uso de la declaración let no se ejecuta hasta que está en la memoria, pero no se promueve. Por lo tanto, todavía es necesario prestar atención a algunos problemas.

Se pueden detectar lentamente varios tipos de errores: errores de sintaxis, errores de referencia, errores de alcance y errores de tipo.

Hay dos tipos de errores de referencia de ReferenceError : el primero: Uncaught ReferenceError: a no está definido

consola.log(a)

a=110; //No hay memoria, genera una variable que no existe

ReferenceError se refiere al segundo tipo de error: ReferenceError no detectado: no se puede acceder a 'a' antes de la inicialización

consola.log(a);

let a=110;// La variable a ya existe en la memoria, pero la declaración de let no se promoverá y le indicará que la memoria se ha definido pero no se puede hacer referencia a ella al generar

Demostración 1 del error de sintaxis SyntaxError : SyntaxError no detectado: token inesperado ')'

si(a>=3)){

 consola.log(a)

} //Error de sintaxis común

Demostración 2 del error de sintaxis SyntaxError : SyntaxError no detectado: el identificador 'a' ya ha sido declarado

sea ​​a=110;

var a = 123;

console.log(a) //deja que las variables declaradas no se puedan declarar repetidamente

Demostración 1 del error de tipo TypeError : TypeError no detectado: a no es una función

 var a=110;

a();

Demostración 2 del error de tipo TypeError : TypeError no detectado: a no es una función

vararr=[1,2,3,4]

arr()

Demostración 1 del error de rango RangeError : RangeError no detectado: longitud de matriz no válida

 var arr = nueva matriz (1000000000000000000000000000)

 console.log(arr)//El rango de longitud de la matriz no puede ser demasiado grande, más allá del rango de longitud de la matriz

Demostración 2 del error de rango RangeError : RangeError no detectado: longitud de matriz no válida

var arr=nueva matriz(-2);

console.log(arr)//El rango de longitud de la matriz no incluye valores negativos. Además, ¿cómo puede la longitud ser un valor negativo, que excede el rango de longitud de la matriz?

Diez Modo estricto

(1) Agregue uso estricto al principio de todo el archivo

(2) El comienzo mismo de la función.

(3) En es6, está en modo estricto de forma predeterminada

¿Por qué establecer el modo estricto?

(1) Elimine algunos lugares irrazonables e imprecisos en la sintaxis js y reduzca algunos comportamientos extraños

(2) Elimine algunas partes inseguras del código js para garantizar el funcionamiento seguro del código js

(3) El modo estricto puede ejecutarse más rápido que el modo no estricto .

Hay muchas notas de sintaxis de modo estricto:

(1) No se permiten declaraciones faltantes, sin var

(2) Octal no permitido: se informará un error de sintaxis

(3) No está permitido escribir la función en if

(4) No se permite repetir los nombres de los parámetros formales (declarar parámetros formales con el mismo nombre)

(5) No está permitido declarar el mismo atributo para el objeto.

(6) No existe una correspondencia uno a uno entre argumentos y parámetros formales.

(6) esta función ya no apunta a la ventana

Detalles de ejecución de once operadores lógicos en código js

       AND lógico: devuelve el primer operando si el valor del primero es verdadero y devuelve el segundo operando (ambos son los números antes de la conversión) si el primer número es falso.

Lógica y resumen: si el primer número es falso, devuelve el primer operando, si el primer número es verdadero, devuelve el segundo operando (ambos antes de la conversión)

0 || falso //falso
falso || 0 //0
1 || falso//1
1 || verdadero //1
"" || falso//falso
1 || falso//1
"" || verdadero//verdadero
verdadero || ""verdadero
verdad || 4 //verdadero

"" && 123//""
123 && 0//0
123 && NaN//NaN
-0 && NaN//-0

12. recursividad

El truco de programación en el que un programa se llama a sí mismo se llama recursividad.

Simplifique problemas a gran escala capa por capa para obtener problemas a pequeña escala, luego resuelva problemas pequeños y luego resuelva problemas grandes capa por capa

Función recursiva: dentro de una función, se llama a sí mismo nuevamente y necesita una salida

función f(){

          f();//Recuerda exportar

}

Recuerda resolver estos pequeños ejemplos.

 利用递归思想,求100的累加
利用递归思想,求斐波那契数列中的第20项
利用递归思想,求数组中元素的和
利用递归思想,求1,3,5,7,9,... 的第N项的值。索引从0开始。
利用递归思想,求1,3,5,7,9,... 前N项的和
利用递归思想,求0,2,4,6,8,... 的第N项的值
利用递归思想,求0,2,4,6,8,... 前N项的和

Supongo que te gusta

Origin blog.csdn.net/zwy1231/article/details/103432294
Recomendado
Clasificación