2015-10-24 4 views
0

Quelle est la différence entre ces deux et pourquoi utiliseriez-vous l'un sur l'autre?Différence d'appel de fonction en javascript

MYUtils.isIOS = (function(){ 
    return navigator.userAgent.match(/(iPad|iPhone|iPod)/g); 
}()); 

var ios = MYUtils.isIOS; 

vs

MYUtils.isIOS = function(){ 
    return navigator.userAgent.match(/(iPad|iPhone|iPod)/g); 
}; 

var ios = MYUtils.isIOS(); 
+2

Aucune différence dans la pratique car la valeur cible ne change jamais. La fonction est appelée plus tôt dans la première. – jfriend00

+0

Le premier devrait vraiment être simplifié à 'MYUtils.isIOS = navigator.userAgent.match (/ (iPad | iPhone | iPod)/g);'. Peut-être que la différence est plus évidente alors. – Bergi

Répondre

1

Dans cet exemple , il n'y a aucune raison forte d'utiliser l'un sur l'autre.

Le premier exemple s'exécute et définit la valeur. La valeur, à partir de ce moment, ne change pas.

Dans le deuxième exemple, chaque fois que vous appelez isIOS(), vous exécutez la fonction interne. navigator.userAgent ne va pas changer à un moment donné au cours de votre vie de la page, donc le résultat ne changera pas.

Cependant, si vous êtes à la recherche d'une certaine valeur que peut changement, vérifier peut-être si une case à cocher HTML est définie, ou à la recherche d'une valeur définie dans localStorage alors la deuxième façon est mieux, parce que vous permettez à un changement environnement.

+0

Certains navigateurs permettent aux utilisateurs de modifier leur chaîne d'agent utilisateur quand ils le souhaitent, donc "* ... ne changera pas ... *" devrait peut-être être "* est peu susceptible de changer *". ;-) – RobG

+0

Bien que ce soit vrai, @RobG, je pensais que cela n'affecte que la charge de la page suivante - mais je n'ai pas testé cela. Il se peut que vous ayez raison. Merci. –