Quand et où utiliser le levage en Javascript [fermé]

11

Je suis nouveau sur Javascript. J'apprends le concept de levage en Javascript.
Sur la base des tutoriels Javacsript du site Web de Mozilla , je suis tombé sur ce mot hoisting. Selon ces tutoriels, les variables en JavaScript sont que vous pouvez vous référer à une variable déclarée plus tard, sans obtenir d'exception . Mais, ma question est de savoir dans quelles circonstances est-il approprié d'utiliser le levage dans un Javascript côté client ou pourquoi devrions-nous utiliser le levage en Javascript. Quels sont ses avantages.

Rudra
la source
1
Partager vos recherches aide tout le monde. Dites-nous ce que vous avez essayé et pourquoi cela n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes, et surtout vous aide à obtenir une réponse plus spécifique et pertinente. Voir aussi Comment demander
moucher
6
@gnat Après toutes les recherches, si j'avais compris ce sujet, pourquoi aurais-je posté cette question ici, pour discuter et comprendre le concept correctement
Rudra
2
@Rudra Ce n'est pas un forum de discussion . De plus, vous n'avez montré aucune preuve que vous avez réellement fait des recherches à ce sujet.
Doval
5
Oui, mais ce n'est pas obligatoire pour poser des questions.
Robert Harvey
2
@Rudra: Gardez à l'esprit que nous ne sommes pas un forum de discussion. Nous sommes en fait un site de questions / réponses. Les questions posées ici doivent être définies de manière à pouvoir raisonnablement répondre dans le format Q&R.
Robert Harvey

Réponses:

11

Je n'ai jamais entendu le terme "levage" utilisé. Si vous faites référence à cette utilisation du levage par Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , alors d'après ce que je peux en déduire, il fait simplement écho à Douglas Crockford de Javascript: The Bonnes pièces et dire que vous ne devez jamais utiliser de levage . Son affirmation à la fin est que toutes les variables doivent être déclarées en haut de votre fonction (comme le suggèrent Crockford et JSLint).

Ou, selon les mots de M. ChristopherBrown, ce n'est pas une fonctionnalité à utiliser , par exemple, mais simplement une bizarrerie liée à la façon dont le navigateur interprète Javascript.

Donc, en bref: jamais et nulle part .

David Cowden
la source
1
Alors, pourquoi ce concept est-il inclus et de quoi s'agit-il?
Rudra
@ Rudra: Le sous-thème "Déclarations, noms et levage" dans l'article lié par David semble couvrir assez bien cela. Quelle partie n'est pas claire?
Robert Harvey
@RobertHarvey Je veux juste savoir où et quand ils l'utilisent. David dit qu'il n'est utilisé jamais et nulle part, mais pourquoi est-il présenté comme une fonctionnalité
Rudra
4
Ce n'est pas parce que quelque chose est une fonctionnalité que c'est une bonne idée. Il y a de nombreuses raisons pour lesquelles les «fonctionnalités» ne sont plus appréciées. Même votre appendice ne sert à rien d’apparemment utile, même s’il l’a probablement fait au temps des hommes des cavernes.
Robert Harvey
1
HOisting est un terme de la théorie du compilateur, en particulier l'optimisation. Il existe depuis au moins 20 ans, mais rendu populaire par cette particularité de Javascript. Si ce n'était pas appelé une fonctionnalité, ce serait probablement un bug.
david.pfx
16

Le hissage décrit une caractéristique de la façon dont Javascript est interprété par le navigateur, et n'est pas tellement une fonctionnalité à utiliser.

Lors de l'interprétation de Javascript, les navigateurs définissent les variables de niveau fonction au début de la fonction. Exemple:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

Dans le code publié, les deux variables "deux" et "résultat" existent au début de la portée de la fonction (évidemment, comme elles y sont déclarées.) Cependant, comme les navigateurs "hissent" les variables, ce qui suit devient du code Javascript légal .

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

L'effet net ici est que vous avez des variables en cours d'utilisation avant de les déclarer, ce qui peut prêter à confusion, en particulier avec les variables de portée globale. Exemple:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

Pour éviter toute confusion, déclarez vos variables en haut d'une fonction.

ChristopherBrown
la source
4
+1: c'est ainsi que je répondrais. Ce n'est pas une fonctionnalité à utiliser ou à ne pas utiliser, c'est juste une propriété de l'environnement à prendre en compte.
scrwtp
1

Pourquoi?

JavaScript n'a pas de portée de bloc , ce qui devrait expliquer pourquoi les choses devraient se hisser au sommet.

Est-ce utile?

Si vous préférez ceci:

var someVariable = someVariable || {};

Au lieu de cela:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

Ensuite, c'est utile. Même si vous ne le remarquez pas!

Clearification

Le premier exemple se traduira par quelque chose comme ceci:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Mahdi
la source