Pourquoi ces deux fonctions javascript ne sont-elles pas équivalentes?

Cette fonction fonctionne:

function refreshCodeMirror(){ $("textarea").each(function(){ var codeMirror = $(this).data('codeMirror'); setTimeout(function(codeMirror){ return function () { codeMirror.refresh(); } }(codeMirror), 10) }); } 

Mais quand j’ai essayé de le simplifier à ceci:

 function refreshCodeMirror(){ $("textarea").each(function(){ var codeMirror = $(this).data('codeMirror'); setTimeout(codeMirror.refresh, 10) }); } 

La simplification ne fonctionne pas.

Certains contextes (éventuellement non pertinents):

La fonction refreshCodeMirror est appelée dans onclick pour un en-tête d’amorçage de tabulation dans un modèle Django:

  
{% for field in form_tab_fields %}
{{ field }} {{ field.errors }}
{% endfor %}

Tout fonctionne bien avec la première fonction ci-dessus et, bien que je souhaite supprimer tous les appels de rafraîchissement redondants, ils ne semblent pas avoir d’importance et lorsque j’utilise une seule zone de texte (en passant l’id de l’élément), la fonction de travail ci-dessus s’arrête travail.

Le problème est que vous perdez le contexte.

Les fonctions qui ne sont pas appelées directement sur un object et qui ne sont pas liées manuellement à un contexte sont appelées dans le contexte global.

 var obj = { print: function() { document.write('
' + this + '

'); } }; obj.print(); var p = obj.print; p();