Sur la base de vos commentaires, il semble que ce que vous « cherchez est le suivant:
function selectPlace(place) {
if(!place){
return selectPlace.placeId;
}else{
$('#selectPlace').html('Selected Place: <b>' + place.Name + '</b>');
$('#map').hide(400);
selectPlace.placeId = place.Id;
}
}
$(document).ready(function(){
$('#postMessage').click(function() {
alert("PlaceId: " + selectPlace());
});
});
ce n'utilise pas une fermeture, juste stocke le dernier ID attribué sur l'objet de la fonction. Vous devez ensuite renvoyer la valeur si elles n'utilisent pas la fonction en tant que setter. Si vous souhaitez utiliser une fermeture pour faire la même chose, il ressemblerait beaucoup à l'exemple ci-dessus:
(function(){
var placeId;
window.selectPlace = function(place) {
if(!place){
return placeId;
}else{
$('#selectPlace').html('Selected Place: <b>' + place.Name + '</b>');
$('#map').hide(400);
placeId = place.Id;
}
}
})();
Par ailleurs, la meilleure façon de repérer une fermeture est si une fonction a des variables dans ce que n'a pas été déclaré avec var
à l'intérieur de la fonction en cours, mais a été dans une autre fonction, il se trouve à l'intérieur. Comme vous pouvez le voir ci-dessus, la variable placeId
n'est pas déclarée à l'intérieur de la fonction selectPlace
, ce qui signifie que la fonction selectPlace
est une fermeture qui utilise la variable placeId
.
Très cool. Oui, je devine que je n'avais pas besoin d'une fermeture, essayant simplement d'éviter d'utiliser un global (j'ai entendu dire qu'ils étaient mauvais). Aucune idée de pourquoi je ne pouvais pas penser à cela, mais merci de l'ajouter! – rball
Au lieu de alert ("PlaceId:" + placeId()); Vouliez-vous dire alerte ("PlaceId:" + selectPlace()) ;? – rball