Ce n'est pas vrai. En JavaScript il y a pas de portée de bloc, seulement la portée de fonction*. Toutes les variables introduites dans une fonction sont hissées en haut de la fonction.
donc ce code:
function prepForDrag(obj, event) {
if (event = "undefined") {
var event = obj || window.event;
}
// ...
}
est interprété un peu comme ceci:
function prepForDrag(obj, event) {
if (event = "undefined") {
event = obj || window.event;
}
// ...
}
Comme Marcel Korpel « s ont souligné, en déclarant la variable event
est inutile dans ce cas parce que event
est déjà une variable locale puisque c'est un paramètre de fonction. Pour plus de détails, lire l'article de Ben Cherry au JavaScript Scoping and Hoisting.
Néanmoins, il existe deux problèmes supplémentaires dans votre code.
Dans l'état vous avez utilisé l'opérateur d'affectation =
au lieu de l'opérateur ==
de comparaison. Donc, la condition évalue toujours à vrai.
Si vous souhaitez vérifier si un argument de fonction a été donné, utilisez l'instruction typeof event == 'undefined'
.
Et j'ai bien peur qu'il y ait encore un problème ici. Quel est le but de la condition? Est-ce que l'argument obj
a quelque chose à voir avec event
? Les navigateurs modernes transmettent un objet événement à la fonction de gestionnaire d'événements en tant qu'argument mais some do not. Pour éviter le problème, le schéma suivant a tendance à utiliser:
function prepForDrag(e) {
var event = e || window.event;
// ...
}
* NB: il y a un let
statement introduit en JavaScript 1.7 qui fournit la portée de bloc à l'intérieur des fonctions. Actuellement it's only supported in Firefox.
Cet article sera intéressant: http://stackoverflow.com/questions/3684923/javascript-variables-declare-outside-or-inside-loop/ – spender