Vous avez déjà vu un langage ne pas permettre de faire passer des variables entre fonctions ? Bah essayez Javascript : https://stackoverflow.com/questions/5786851/define-a-global-variable-in-a-javascript-function
Donc :
function ONE() {
var truc=machin;
}
function TWO() {
var bidule=truc;
}
ne marche pas. Bidule ne peut pas être défini, car TWO()
ne voit pas la variable "truc".
C'est insensé. Les idiots qui ont fait ça se défendent avec du blabla charlatanesque de "scope", en disant "t'as pas compris que les variables sont captives des blocs où elles sont définies",
mais ces mêmes idiots ont inventé trois façons de déclarer une variable :
let truc;
var truc;
const truc;
La première façon fait que la variable est volatile et ne sera pas connue d'un bloc descendant, la deuxième façon le permet, et la troisième façon aussi mais en faisant qu'on ne puisse pas changer le contenu de la variable (qui devient une constante).
C'est cool bande de cons, mais sinon pour passer une variable d'une fonction à une autre, on fait comment ? Car si on ne peut pas propager la variable dans un bloc au dessus, et/ou en dehors, c'est embêtant !
Donc en gros vous êtes capables de comprendre qu'effectivement il faut parfois (PARFOIS) isoler des composantes (les variables par exemple) pour éviter d'avoir des problèmes d'écrasements à l'autre bout de votre projet, mais au lieu de prendre des concepts valables dans le monde de la programmation comme les namespaces, ou les protections de fonctions, vous préférez... carrément plomber les variables comme des gros gorets ! Et sans possibilité d'ajouter un mot comme "global" juste avant, pour lui donner exceptionnellement le droit d'être accessible ailleurs ?
Mais c'est bien, il faut continuer comme ça. Vous êtes complètement cons.
Vous êtes donc obligé de prendre le bloc de code de ONE()
et de le foutre à l'intétrieur et au début de TWO()
.
function TWO() {
var truc=machin; // <--- copié depuis ONE().
var bidule=truc;
}
Vous ne pouvez même pas appeler ONE()
dans TWO()
, ça ne marchera pas car
ONE()
est un bloc... (sic).
function ONE() {
var truc=machin;
}
function TWO() {
ONE();
var bidule=truc;
}
Du coup entre ses brackets {
et }
, la variable truc
sera définie, mais elle ne sera pas au même niveau d'embranchement (scope) que le reste du code dans TWO()
.
...
function TWO() {
ONE();
var bidule=truc; // <--- cette ligne est en dehors (au dessus) du bloc "ONE();" de la ligne précédente.
}
Eh oui : ils ne propagent les variables que dans les embranchements descendants mais pas ascendants, WOUHOUUU !
Ces putain d'idiots me fument... Et le pire c'est qu'ils se défendent en faisant mine de rien, hein, en vous retournant des réponses comme "mais nan c'est toi, t'as pas compris"... -_- De toutes façons avec eux c'est tout le temps l'utilisateur qui a tort, pas la bande de cons qui ont inventé le langage. Ca n'est pas possible, hein, car vous êtes tout seul, et eux sont plusieurs... et bien entendu la raison dépend du nombre, c'est bien connu ! Et puis ils ont tout prévu hein, c'est forcément bien conçu donc il n'y a pas à se plaindre ; c'est juste que votre truc là, c'est "pas fait pour"...
Mais fun fact : c'est le SEUL langage que je connais qui fait ça !!!! Dans tous les autres langages, si vous voulez protéger des variables pour les limiter à une fonction et qu'elles ne soient pas accessibles en dehors, il y a un moyen, mais sinon par défaut elles le sont. Mais nan, des petits cons de 18-25 se pliant à à la mode ont décidé que "pour des mesures de sécurité" (c'est l'argument toujours utilisé par ces tocards de fanboys de merde sans capacité à avouer la connerie pure de leur jouet), il vallait mieux faire chier et vous forcer à dégueulasser votre code en vous empêchant de faire des fonctions qui rassemblent du code commun à plusieurs autres. C'est un peu comme TWIG, qui "par mesure de sécurité" (sic) vous empêche de créer des variables...
Comme ça vous répétez votre code comme un teubé, le DRY c'est pour les snobs (mais pas pour les hipsters alcoolisés apparemment), et si vous voulez modifier/mettre à jour une portion de ce code qui se répète partout, bah vous le faites à la main, au lieu de le faire une fois dans la fonction "commune".
Car dixit :
"c'est toi, tu veux faire trop compliqué" ...
OH PUTAIN... JE VAIS LES BAFFER.
Edit du 13 juin 2023 :
Apparemment, il suffit de virer var
ou let
ou const
devant le nom de la variable pour la transformer en globale. Donc :
function ONE() {
truc = bidule;
}
ONE();
if (truc == "bidule") {
console.log("ok");
function TWO() {
var machin = truc;
console.log("machin = " + machin);
}
TWO();
}
Source : Access variable outside function scope [duplicate] - Stackoverflow.com
Apparemment, aucun de ces moutons n'est au courant de cette solution, qui par ailleurs contredit leur sacro-sainte dévotion aveugle.
Ils sont aussi cons que leur langage.
PS : Si ça se trouve c'est un bug et c'est même pas prévu, bwahahaha qu'est-ce que c'est sale...