2009-03-04 6 views

Répondre

3

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.

+0

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

+0

Au lieu de alert ("PlaceId:" + placeId()); Vouliez-vous dire alerte ("PlaceId:" + selectPlace()) ;? – rball

6

Il semble une chose raisonnable à faire, en fonction du contexte, vous pouvez facilement le faire en remplaçant votre code avec une expression de fonction à la:

(function(){ 
    var placeId; 
    // It looks like you want selectPlace to be a global function? 
    // hence i'm using assignment of a function expression here 
    selectPlace = function (place) { 
     $('#selectPlace').html('Selected Place: <b>' + place.Name + '</b>'); 
     $('#map').hide(400); 
     placeId = place.Id; 
    } 

    $(document).ready(function() 
    { 
     $('#postMessage').click(function() { 
      alert("PlaceId: " + placeId); 
     }); 
    }); 
})(); 
+0

Je ne pense tout simplement pas que je comprends (fermetures). Je pensais que je pourrais les utiliser pour ne pas avoir un var placeId et au lieu de quelque chose comme selectPlace() retourner une place.Id à la place. . – rball

+0

Quelque chose comme: selectPlace = function (place) { \t \t $ ('# de selectPlace') html ('Selected Lieu: ' + place.Name + ''); \t \t $ ('# map'). Hide (400); \t \t place de retour.Id; \t} $ ('# postMessage') cliquez sur (function() { \t \t \t alerte ("PlaceId:" + selectPlace()); \t \t}). – rball

+0

Ce qui ne fonctionne pas: P Je ne sais pas non plus comment votre exemple est meilleur que mon code? Je n'essaie pas de faire semblant, mais je ne sais vraiment pas. Je ne suis pas une personne javascript alors je ne sais pas comment le faire de cette façon aiderait ou serait mieux? – rball

Questions connexes