Conceptos básicos de JavaScript: función

¡Acostúmbrate a escribir juntos! Este es el décimo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

Los objetos no tienen raíces y los tipos no tienen forma.

Originalmente no hay nada, ¿dónde está el polvo?

Cuando éramos niños, llorar era nuestra mejor manera de resolver problemas. Al crecer, la risa fue nuestra arma para enfrentar la realidad.

1. El modelo de memoria de JavaScript

La esencia de JavaScript es un objeto. Un objeto puede contener múltiples propiedades. Las propiedades de un objeto se pueden dividir en dos tipos: literal y objeto, y los objetos se dividen en dos tipos: Objeto objeto y objeto función.

Por tipo de datos:

  • tipo de datos simples
    • número
    • cuerda
    • booleano
  • tipos de datos especiales
    • nulo
    • indefinido
  • tipos de datos complejos
    • objeto
      • Objeto
      • objeto de función

Los dos tipos de propiedades de literales y objetos se almacenan de manera diferente en la memoria (similar a Java)

  • Cantidad directa: use directamente dos piezas de memoria para guardar el nombre del atributo y el valor del atributo respectivamente

  • Objeto: se requieren tres piezas de memoria para almacenar el nombre del atributo, la dirección del atributo y el contenido del atributo, respectivamente.

Para las propiedades de tipo de objeto, el conocimiento del nombre de la propiedad apunta a la dirección de memoria donde se guarda el objeto, en lugar del objeto real que se está ejecutando. El código se demuestra de la siguiente manera:

function F(){
    this.v = 1;
}
var f1 = new F();
var f2 = f1;
console.log(f2.v);
f2.v = 2;
console.log(f1.v);
f1 = null;
console.log(f2.v);

复制代码

Diagrama de ejecución del código:

Siempre hemos dicho que JavaScript es un lenguaje de scripting, interpretado y ejecutado en el navegador, y no debería tener un modelo de memoria propio, pero no es así. Independientemente del lenguaje compilado o interpretado, sus variables, funciones, objetos y otros datos se almacenan en la memoria. Al usarlo, debe encontrar el contenido específico correspondiente en el lugar especificado a través del nombre de la variable y luego realizar la operación real.

2. Cómo se ejecutan las funciones en JS

Ya hemos tocado la función antes, y la función tiene solo dos partes: los datos y la operación sobre los datos. Los datos se pueden dividir en datos externos y datos internos . No explicaremos primero los datos externos, aquí hablamos principalmente de funciones, los datos internos se dividen en dos partes : parámetros y variables .

Parámetros (parámetros formales) : A los parámetros se les asignará un nuevo valor cada vez que se ejecute la función;

Variables (variables locales) : se establecerán en el mismo valor inicial cada vez;

  • ¿Cómo se almacenan las variables y parámetros de la función?

    La función creará una nueva matriz de parámetros y una matriz de variables antes de cada ejecución (por supuesto, también se puede combinar en una matriz, que generalmente se implementa mediante el uso de una pila), y luego establecerá los parámetros pasados ​​en la llamada al parámetro matriz, y la matriz variable Tiene el mismo contenido en cada ejecución. Los datos simples se almacenarán directamente en la matriz, mientras que los datos complejos, la matriz solo almacenará la dirección y los datos específicos se almacenarán en el montón.

    function paramTest(p1){
        var message = "Hello World";
        console.log(p1);
        for(var i in arguments){
            console.log(arguments[i]);
        }
    }
    //函数的调用
    paramTest("a","b","c");
    //输出结果为: a a b c
    复制代码

    Usamos la depuración de Chrome, cuando se ejecuta la función, el parámetro p1 estará en la misma posición que la variable mensaje y el método utilizado en la función, es decir, no distinguirá si es un parámetro o una variable al ejecutar dentro la función. En la función JS, se crea automáticamente una variable interna llamada arguments, y luego se guardan en ella las direcciones de todos los parámetros. arguments es similar a un objeto de matriz, que se puede usar para obtener los parámetros pasados ​​cuando se llama a la función.

    El método paramTest primero imprime el valor de p1, y luego atraviesa e imprime los valores de todos los parámetros en los argumentos.Se puede ver que el valor del parámetro p1 es el mismo que el valor de los argumentos[0], y los parámetros de la función se almacenan en la variable arguments en orden. El número de parámetros pasados ​​al llamar a una función también puede ser diferente de cuando se define, por lo que no hay un método sobrecargado para una función con el mismo nombre en JS.

  • Alcance a nivel de función en lugar de alcance a nivel de bloque para variables definidas por función

    function scopeTest(){
        if(true){
            var message = "Hello World";
        }
        console.log(message);
    }
    //函数的调用
    scopeTest();
    //输出结果为:Hello World
    复制代码

    El mensaje aquí se define en el bloque de declaraciones if, pero aún se puede llamar fuera de la declaración if.

    Cuando se ejecuta el método en JS, todas sus propias variables definidas con var se unificarán en la matriz de variables introducida anteriormente, por lo que en una función, todas las variables definidas con var tienen el mismo estado.

Supongo que te gusta

Origin juejin.im/post/7084789466488897550
Recomendado
Clasificación