2009-02-21 7 views
0

si j'ai:fonction javascript pointeur

function init(t,y,u) 
{ 
    alert(t + " " + y + " " + u); 
} 

// String.prototype.add = init(5, 6, 7); // 1) 
// window.onload = init(5,6,7); // 2) 

dans le 1) init est exécuté et il pointeur assegned à String.prototype.add mais dans le 2) la fonction est exécutée seulement une fois ... mais pourquoi pas deux fois également lorsque l'événement onload est déclenché?

Merci

Répondre

3

Voici ce qui se passe avec votre code:

  • Définition d'une fonction appelée initialisation avec trois paramètres qui seront alertés lorsque la fonction est appelé.
  • L'appel de la fonction init avec des paramètres 5,6,7 (une alerte pop-up) et affecter le résultat (non défini) à String.prototype.add
  • L'appel de la fonction init avec des paramètres 5,6,7 (une alerte sera popup) et affecter le résultat (non défini) à window.onload

Si le code ci-dessus a été exécuté avant que l'événement a été congédié window.onload, rien ne se passera quand il est tiré, parce qu'il est réglé sur undefined.

8

dans le 1) init être exécuté et il pointeur assegned à String.prototype.add

Non, ce ne sera pas. La fonction sera simplement exécutée et sa valeur de retour (undefined) sera affectée à String.prototype.add. Aucun pointeur de fonction ne sera affecté. Pour ce faire, vous devez retourner une fonction!

function init(t,y,u) { 
    alert(t + " " + y + " " + u); 
    return function() { alert('function call!'); }; 
} 
+0

Pour se retourner: return arguments.callee; – some

5

Vous voudrez peut-être quelque chose comme:

String.prototype.add = function() { init(5, 6, 7); }; 
+0

At-il demandé du code? –

+0

Avez-vous besoin d'aide pour lire sa question? –

Questions connexes