48 votes

Pourquoi suis-je trouver Javascript/jQuery donc difficile d'obtenir le droit?

Mon fond est en C et j'ai ramassé PHP, mySQL, HTML, CSS sans trop de problème.

Mais je suis la recherche de Javascript/jQuery étonnamment difficile d'obtenir le droit. Très frustrant. Pourquoi?

  1. Il semble violent un certain nombre de traditionnel principes de programmation (par exemple, la portée des variables)

  2. Des variables non définies semblent surgir de nulle part et ont déjà des valeurs qui leur sont associés. Par exemple (à partir du jQuery docs):

    $("a").click(function(event) {
        event.preventDefault();
        $('<div/>')
              .append('default ' + event.type + ' prevented')
              .appendTo('#log');
    });
    

    Qu'est-ce exactement "événement"? Dois-je utiliser le nom de cette variable? Dois-je simplement supposer que cet objet est instancié comme par magie avec le droit des trucs et je peux utiliser l'une des méthodes de liste à la JQuery API?

  3. Il semble y avoir des tas de règles aléatoires (par exemple, retourner false pour arrêter une action par défaut, mais parfois cela ne fonctionne pas?)

  4. Un comportement Non déterministe lors du débogage. (par exemple, j'ai actualiser le navigateur, essayez quelque chose et obtenir le résultat X pour les variables JS je suis de regarder dans Firebug. J'ai actualiser à nouveau et je reçois le résultat Y?)

  5. Très désordonné code qui est difficile à suivre. Ce qui se passe quand? Je suis à l'aide de Firebug et Outils de développement Chrome, mais je ne reçois pas assez de visibilité.

Il semble que tous les jours il y a un peu aléatoire JS "règle" qui vient que je n'en ai jamais vu dans aucun de mes JS livres ou des tutoriels.

Que dois-je faire pour faire en Javascript/jQuery plus déterministe, contrôlée et logique pour moi?

Existe-il des ressources qui expliquent Javascript bizarreries/pièges?

Merci!

12voto

BalusC Points 498232

1) Il semble violent un certain nombre de traditionnel principes de programmation (par exemple, la portée des variables)

Vous devez déclarer des variables à l'aide d' var, sinon il va aller dans la portée globale.

2) des variables non définies semblent surgir de nulle part et ont déjà des valeurs qui leur sont associées (comment est-ce arrivé?)

C'est peut-être lié à 1) et/ou 4).

3) Il semble y avoir des tas de règles aléatoires (par exemple, retourner false pour arrêter une action par défaut, mais parfois cela ne fonctionne pas?)

Vous devez laisser le gestionnaire de retour faux ainsi. E. g. form onsubmit="return functionname()". Vous avez également besoin de retour de la "main" de la fonction, non seulement à partir d'un dispositif de fermeture (d'une fonction à l'intérieur d'une fonction), se référant à votre question précédente. Il ne serait de retour dans le "principal" de la fonction et continuer sur.

4) un comportement Non déterministe lors du débogage. (par exemple, j'ai actualiser le navigateur, essayez quelque chose et obtenir le résultat X pour les variables JS je suis de regarder dans Firebug. J'ai actualiser à nouveau et je reçois le résultat Y?)

Probablement le code a été exécuté avant le DOM HTML a été terminé le remplissage. Vous avez besoin de crochet sur window.onload ou $(document).ready() chaque fois que vous voulez exécuter des trucs pendant le chargement de la page.

5) Très désordonné code qui est difficile à suivre. Ce qui se passe quand? Je suis à l'aide de Firebug et Outils de développement Chrome, mais je ne reçois pas assez de visibilité.

Je parie que vous parlez à propos de jQuery source? C'est juste une grande bibliothèque. Vous devriez pas vous inquiéter à ce sujet lors du débogage. Plutôt vous inquiéter au sujet de votre propre code. Cependant, assurez-vous que vous êtes à la recherche unminified version de jQuery code source.


Voir aussi:

10voto

Broam Points 2646

Douglas Crockford's "Javascript: Les Bonnes Parties" a été une ressource inestimable. Javascript joue beaucoup plus comme Lua, Lisp, ou en Python qu'en C, il arrive juste à ressembler à C.

Lien vers Amazon; je l'ai accroché le mien de O'Reilly.

6voto

Tim Points 1088

Pour être honnête, je pense que vous avez une bonne compréhension. Certains de mes décrochements étaient similaires. La manière que j'ai été en mouvement est: "eh bien, si c'est la façon dont il est, alors que c'est la façon dont il est". Accepter les différences et à la charrue avant. PHP fait partie de la même chose (les variables peuvent apparaître de nulle part, etc...). Juste le code de la façon dont vous voulez le code, et si ça fonctionne, tant mieux!

Puis, après vous en êtes au point de commencer à briser les profils et voir si il ya quelque chose que vous pouvez optimiser.

Voici un couple de choses:

Si vous comprenez CSS, les sélecteurs jQuery devrait être facile. Aussi loin que le code va, c'est facile aussi si vous pouvez traiter avec le chaînage et JSON. EDIT: aussi, le jQuery documentation sur tout ce qui est EXCELLENT! Et Il n'y a pas de pénurie de jQuery experts ici AFIN de nous aider à les noobs (et j'espère que nous pourrons retourner la faveur des nouveaux noobs).

Il est possible de travailler avec. (En gros) ce qui est écrit en dehors d'une fonction ou de l'objet est dans la portée globale. Si vous êtes à l'intérieur d'un objet ou d'une fonction et d'utiliser var alors que définit la variable du champ d'application

Javascript n'est pas comme une C-base de la langue (C++ ou PHP même). Il utilise des prototypes à traiter avec la classe/les relations d'objet plutôt qu'un sous-classement régime.

Le n ° 1 chose qui m'a sidéré, c'est que tout JS qui apparaît n'importe où sur la page, ou qui a été inclus dans <script> tags est un jeu équitable. Si vous avez une variable globale dans un script, vous pouvez utiliser la même variable dans un tout autre script et il fonctionne. Qui peut être ce que tu veux dire sur les variables montrant sorti de nulle part. Aussi, il y a quelques DOM en fonction des variables qui peuvent juste "montrer" trop.

De toute façon, je pense que si vous venez de la charrue à l'avance, vous aurez quelques moments "AHA". Je suis un noob par rapport à la programmation, mais je ne cesse de croître aussi longtemps que je ne raccrochez pas sur quelque chose qui n'a pas trop d'impact sur la réalité de la le code à exécuter.

3voto

meder Points 81864
  1. C'est un langage basé sur les prototypes de l'héritage et est influencé par les langages de programmation fonctionnelle et le paradigme de sorte qu'il n'est pas complètement juste OO/Procédurale comme d'autres langues. Les Variables sont implicites globals sauf déclaration avec var.

  2. Veuillez inclure un exemple?

  3. return false les sorties de la fonction comme dans tout langage de l'instruction return. preventDefault() serait la méthode DOM pour annuler le comportement par défaut d'un lien

  4. Javascript est utilisé principalement sur le côté client. Comme il ya beaucoup d'agents utilisateurs, chacun d'entre eux ont une mise en œuvre différente de la DOM, ce qui est très contradictoire, moreso que JS lui-même. Encore une fois, veuillez inclure un réel exemple pour obtenir une réponse définitive.

  5. Vous trouverez désordonné code dans n'importe quelle langue, et peut-être que votre manque de compréhension perçoit le code comme une malpropre, alors qu'en fait il n'est pas si mal. Ou peut-être vous êtes à la recherche à un certain minifiés/obfuscation de code.

Je recommande http://eloquentjavascript.net/ pour l'apprentissage des aspects de Javascript.

Choses que vous allez apprendre à partir du lien ci-dessus

  • les lambdas
  • fermetures
  • Prototypes héritage
  • Basée sur les événements de la programmation
  • Débogage
  • DOM

2voto

Jakob Points 11155

"JavaScript: Les Bonnes Parties" par Douglas Crockford est un bon début

Dans votre cas, les annexes ("le mauvais" et de "l'affreux parties") est peut-être le plus intéressant :)

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