Кажете, че имате променлива:
var x = [1,2]
Ако това е променлив обект, можете да направите:
x.append(3)
x
>> [1,2,3]
Но ако е неизменен и искате да промените стойността на x, ще трябва ефективно да направите:
// init x
var x = [1,2]
// add a 3 to x
x = [1,2,3]
x
>> [1,2,3]
Каква е разликата между променливостта и просто промяната на променливата?
Най-доброто ми предположение е, че когато правите append(3)
, това е промяна на препратка към същата променлива в паметта, но когато x = [1,2,3]
, вие вероятно декларирате нова променлива x, препращайки към нов блок в паметта и освобождавайки стария блок, който x=[1,2]
е заемал.
Изглежда, че неизменните променливи не трябва да могат да се променят. Но много пъти искаме неизменните променливи да се променят. Например в React променливите на състоянието се считат за неизменни. Но смисълът на състоянието е, че променливите могат да се променят. Така че, за да промените стойностите им, трябва да преминете през тези много заобиколни начини, като извикването на setState()
и захранването му с функции за обратно извикване, ако искате да направите нещо като добавяне на елемент към списък.