// I created two function in JavaScript // **Function 1** function add(a, b) { return a + b; } // To call above function I use and it worked as expected add(2, 3); // **Function 2** let x = function mul(a, b) { return a * b; } // To call above function I use two ways x(2, 3); mul(2, 3); // This won't work. Why?¿Por qué mul(2,3); lanzando un error?
mul(2,3) es el nombre de la función, debe usarse para llamar a la función.
Esto le muestra que en JavaScript, las funciones también son valores de primera clase. En la función de add que tienes ahí arriba, el nombre de la función: add , es en realidad una variable en la que se almacena una definición de función. Para el segundo ejemplo, mul no está registrado como una variable en el alcance (lista de variables) en la memoria del programa, sino que lo que tiene allí es una expresión de función, en la que asigna una definición de función o dice valor de función a una variable que es x en su caso, omitir el mul en esa definición de función es de hecho válido.
El error de llamar a mul se produce al intentar acceder a mul en el ámbito (parece ser global) donde no está declarado y tampoco es accesible desde otros ámbitos a los que puede acceder el ámbito global.
El alcance (variables disponibles para la memoria de un programa) existe en diferentes niveles en JavaScript, dos de los cuales son el alcance global y el alcance de la función.
Dentro del alcance de la función mul , se puede acceder a mul allí, así como a otras variables en un alcance que está en un nivel superior como add (presente en el alcance global) porque los alcances internos pueden acceder a los alcances externos.
Mientras que mul , así como otras variables declaradas dentro de él, no pueden ser accesibles fuera del alcance de la función de mul, porque el alcance externo no puede acceder al alcance interno.
Los ámbitos internos de su fragmento son los de los ámbitos de función add y mul , mientras que el ámbito externo parece ser un ámbito global.