He estado usando JavaScript desde hace algún tiempo, pero este código en particular me ha dejado un poco perplejo.
¿Por qué es este el resultado de la siguiente pieza de código?
length = 10; function func() { console.log(this.length); } var obj = { length: 5, thisFunc: function(func) { func(); arguments[0](); } }; obj.thisFunc(func, 3);productor
10 2y no
10 5o al menos
10 10 ¿Alguien podría explicarme de dónde proviene el valor 2 y qué me perdí cuando se trata de this en esta instancia particular (sin juego de palabras)?
En el primer caso, es lo mismo que hacer console.log(this.length) en cualquier parte del ámbito global. Así que serán 10 como lo entiendas.
Como se menciona en los comentarios, el objeto de arguments es un objeto similar a una matriz que tiene una propiedad de longitud.
Puede usar arguments.length para contar con cuántos argumentos se llamó a la función`
En la cita anterior, la parte llamada con es importante.
En el segundo caso, la función se ejecuta en el contexto del objeto de arguments . Sabes que el valor de this dentro de una función depende de cómo se invoque. Aquí this es el objeto arguments , cuya longitud es 2.
length = 10; function func() { console.log(this.length); } var obj = { length: 5, thisFunc: function(func) { func(); arguments[0](); console.log(arguments.length); } }; obj.thisFunc(func, 3); console.log(this.length);