In un'app JavaScript, supponiamo di avere un oggetto nidificato come questo:
var myObject = {
someProp: {
someOtherProp: {
anotherOne: {
yetAnother: {
myValue: "hello!"
}
}
}
}
}
In un'altra parte del codice, sto chiamando myValue
più volte (lo chiamo tre volte in questo esempio ma immagino ci sia molto di più):
someFunc() {
doSomething(myObject.someProp.someOtherProp.anotherOne.yetAnother.myValue)
doSomethingElse({
arg1: "something",
arg2: myObject.someProp.someOtherProp.anotherOne.yetAnother.myValue
})
if (myObject.someProp.someOtherProp.anotherOne.yetAnother.myValue == "hola") {
doStuff()
}
}
A parte l'ovvia leggibilità e guadagni di manutenibilità , è più veloce farlo in questo modo:
someFunc() {
let val = myObject.someProp.someOtherProp.anotherOne.yetAnother.myValue
doSomething(val)
doSomethingElse({
arg1: "something",
arg2: val
})
if (val == "hola") {
doStuff()
}
}
O è più o meno lo stesso, dietro le quinte?
In altre parole, l'interprete deve percorrere l'intero albero myObject
e cercare ogni proprietà annidata ogni volta, nel caso 1, o memorizza in qualche modo il valore, oppure esiste un altro meccanismo che lo rende veloce come nel caso 2?
Contesto: qualsiasi browser moderno (Chrome, Safari, Firefox, Edge).