Variable de levage
L'un des plus simple, les utilisations de levage est variable de levage. Si nous n'avions pas de variable de levage, ce serait jeter un ReferenceError
:
var bar = foo;
var foo;
Cela ne semble pas utile dans l'immédiat, mais il nous permet de faire les choses comme ceci:
var myCoolJS = myCoolJS || {};
Ceci signifie fondamentalement à quoi il ressemble: myCoolJS
est myCoolJS
si elle existe, ou d'un nouvel objet si elle ne le fait pas. Le deuxième myCoolJS
ne pas jeter un ReferenceError
si myCoolJS
n'existe pas déjà, parce que cette déclaration de variable est hissé.
Cela nous évite de faire un peu maladroite typeof myCoolJS != 'undefined'
vérifier.
Fonction de levage
Fonction de levage peut être particulièrement utile lors de la combinaison de plusieurs scripts en un seul. Par exemple, j'ai créé un léger moment de la construction, de la mise en œuvre de CommonJS modules. Cela fournit le même module
, require
, et exports
fonctionnalités que l'on trouve dans node.js. J'ai construit l'outil pour permettre aux modules requis pour être composé de plusieurs fichiers. Par exemple, require('/foo')
pourrait entraîner un module composé de deux fichiers, foo.js
(le "corps" du fichier") et foo.h.js
(le "fichier d'en-tête").
Cela permet au corps "fichier" de n'avoir aucune connaissance de la libre variables fournies par le CommonJS modules de l'environnement; tout cela est géré dans l'en-tête. Cela rend le code réutilisable et facile à tester sans bâtiment. Cependant, depuis les en-têtes sont précédées du corps, nous tirons parti de la fonction de levage dans le corps du fichier à autoriser des exportations dans les en-têtes. Par exemple:
// dom.h.js
var util = require('util').util;
exports.css = css; // we can do this because "css" is hoisted from below
// ... other exports ...
...
// dom.js
function css(){}; // this would normally just be an object.
css.hasClass = function(element) { ... };
css.addClass = function(element) { ... };
// ...other code...