Certo, uno sviluppatore con accesso al codice sorgente  potrebbe  iniziare a manipolare ciò che vuole. E nel processo rende qualcosa di molto fragile e non gestibile. 
 Rendendo il più privato possibile, rispettando questo, e mostrando solo interfacce ben definite, puoi semplificare il cambiamento delle cose dietro la scena, per esempio, correggere bug o migliorare le prestazioni. Se un altro codice fa casino con le variabili, allora le modifiche sono piuttosto difficili, perché causeranno l'interruzione dell'altro codice. 
 Non sono sicuro di come Javascript gestisca la privacy, ma in linguaggi come Java e C ++ c'è un supporto per il compilatore per rafforzare la privacy. 
 Considera una classe che rappresenta un indirizzo IP: 
public class IpAddress {
  public string ipAddress;
}
 Al momento, chiunque può inserire qualsiasi cosa in ipAddress (è un campo pubblico). 
IpAddress ia = new IpAddress();
ia.ipAddress = "weeeee!";
 Ultimo controllo,   weeeee!    non era un indirizzo IP valido. Ma, rendendolo privato, possiamo assicurarci che gli indirizzi non validi vengano buttati fuori. Naturalmente, avremo ancora bisogno di un modo per accedervi e aggiornarlo. Quindi creiamo metodi pubblici: 
public class IpAddress {
  private string ipAddress;
  public string toString() {
    return ipAddress;
  }
  public boolean setipAddress(string newIp) {
    if (isValid(newIp)) {
      ipAddress = newIp;
      return true;
    } else {
      return false;
    }
  }
}
 Nota che ora abbiamo ancora accesso al valore dell'indirizzo IP e possiamo aggiornarlo, ma ora possiamo essere sicuri che quando viene aggiornato, il nuovo valore è un valore valido, invece di qualcosa come   weeeee!   . 
ia.ipAddress = "this won't compile";
ia.setipAddress("This won't update the address");
ia.setipAddress("192.168.0.1"); // works
 Allo stesso modo, se decidessimo che   string    è un modo scadente di memorizzare un indirizzo IP? Forse un quartetto di   int    s sarebbe meglio. Prima, quando il campo   ipAddress    era pubblico, qualsiasi codice che lo utilizzava, o semplicemente per visualizzarlo o per modificarlo, si interrompeva se provassimo a modificare il nostro schema di archiviazione. Ma dal momento che stiamo usando metodi pubblici per l'accesso invece di accedere direttamente al campo, possiamo farlo senza rompere nulla: 
public class IpAddress {
  private int part1;
  private int part2;
  private int part3;
  private int part4;
  public string toString() {
    return "" + part1 "." + part2 + "." + part3 + "." + part4;
  }
  public boolean setipAddress(string newIp) {
    if (isValid(newIp)) {
      part1 = extractOct(newIp,1);
      part2 = extractOct(newIp,2);
      part3 = extractOct(newIp,3);
      part4 = extractOct(newIp,4);
      return true;
    } else {
      return false;
    }
  }
}
 Dal punto di vista di chiunque usi questa classe, sembra che questo stia memorizzando l'indirizzo IP come   string    o quattro   int    s: 
public class IpAddress {
  public string toString()
  public boolean setIpAddress(string newIp)
}
 e non hanno bisogno di sapere, o si preoccupano che le cose siano cambiate dietro le quinte. * 
  * In generale. Alcuni casi rari potrebbero interessare. Per esempio. i sistemi in tempo reale possono essere sensibili ai cambiamenti delle prestazioni, sia più veloci che più lenti.