const obj = { length:10, log() { console.log(this.length) } } obj.log() // 10 const length = 20 const fn = obj.log fn() // 0 const arr = [30,obj.log] arr[1]() // 2 ¿Por qué el resultado fn() es 0 ? si usa var length = 20 en lugar de const length = 20 , el resultado es 20 , ¿cómo sucede esto?
las diferencias radican en lo que this significa en el contexto de ejecución de la función log
en el primer caso this = obj así que this.longitud = 10
en el segundo caso, this es el objeto de la window en el navegador, por lo que si usa var o si escribe window.length , devuelve el valor que estableció
en el tercer caso, esto significa la matriz, por lo que devuelve la longitud de la matriz
const obj = { length:10, log() { console.log(this.length) } } obj.log() // 10 const length = 20 const fn = obj.log fn() // 0 window.length = 20 fn() // 20 const arr = [30,obj.log] arr[1]() // 2