64 votes

portée de la variable javascript dans l'instruction IF

Les variables déclarées et affectées dans une instruction "if" sont-elles visibles uniquement dans ce bloc "if" ou dans l'ensemble de la fonction ?

Est-ce que je fais ça correctement dans le code suivant ? (semble fonctionner, mais déclarer plusieurs fois la "structure var" semble gênant) des solutions plus propres ?

     function actionPane(state) {
    if(state === "ed") {
        var structure = {
            "element" : "div",
            "attr" : {
                "class" : "actionPane"
            },
            "contains" : [{
                "element" : "a",
                "attr" : {
                    "title" : "edit",
                    "href" : "#",
                    "class" : "edit"
                },
                "contains" : ""
            }, {
                "element" : "a",
                "attr" : {
                    "title" : "delete",
                    "href" : "#",
                    "class" : "delete"
                },
                "contains" : ""
            }]
        }
    } else {
        var structure = {
            "element" : "div",
            "attr" : {
                "class" : "actionPane"
            },
            "contains" : [{
                "element" : "a",
                "attr" : {
                    "title" : "save",
                    "href" : "#",
                    "class" : "save"
                },
                "contains" : ""
            }, {
                "element" : "a",
                "attr" : {
                    "title" : "cancel",
                    "href" : "#",
                    "class" : "cancel"
                },
                "contains" : ""
            }]
        }
    }
    return structure;
}

6voto

TheDarkIn1978 Points 7794

ECMAScript 2015 (ES6) inclut deux nouveaux mots-clés qui permettent enfin à JavaScript d'accomplir une portée de bloc appropriée sans avoir besoin d'utiliser une syntaxe familière de contournement :

  1. laisser
  2. const

2voto

Eric Conner Points 1984

Les variables déclarées à l'intérieur de l'instruction if seront disponibles à l'extérieur tant qu'elles résident dans la même fonction.

Dans votre cas, le meilleur moyen serait de déclarer la structure, puis de modifier les parties de l'objet qui diffèrent dans les deux cas :

 var structure = {
    "element" : "div",
    "attr" : {
        "class" : "actionPane"
    },
    "contains" : [{
        "element" : "a",
        "attr" : {
            "title" : "edit",
            "href" : "#",
            "class" : "edit"
        },
        "contains" : ""
    }, {
        "element" : "a",
        "attr" : {
            "title" : "delete",
            "href" : "#",
            "class" : "delete"
        },
        "contains" : ""
    }]
}

if(state != "ed") {
    // modify appropriate attrs of structure (e.g. set title and class to cancel)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X