トップの回答は古くなっています。現在(2012年8月)calleeは少なくともFirefoxでは推奨されていません。現在(2012年8月)呼び出し先がある「... ECMA-262で非推奨。」(discussionを参照してください)
あなたがに実行されている2つの問題があります。
- 関数ハンドラが唯一のイベント渡されますオブジェクト。
- あなたは2のための再帰
ソリューションのためにそれを参照することができませんので、関数は、名前が付いていない:これは、2つの簡単です
。通常、匿名関数を使用する理由は、名前空間をきれいに保つことです。括弧はローカル名前空間を定義するので、関数に名前を与えた後はカッコの外側ではアクセスできません。以下は、あなたのために動作します:
$('.someclass').onClick(function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
ソリューション1のために:
これは少し難しくなります。関数に渡されるのはイベントオブジェクトだけなので、値を渡すためにはそれを拡張する必要があります。幸いにも、jQueryにはシステムがあります。just for this!
$('.someclass').on('click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
注:これはあなたがDOMSubtreeModifiedと同様inifiniteループを防止するためのハンドラを着脱しなければならないときに特に便利です。
$('.someclass').on('DOMSubtreeModified.mynamespace', {myvar: 0}, function myfunc(event){
$(this).off('DOMSubtreeModified.mynamespace');
... Some Code that changes .someclass subtree ...
event.data.myvar = event.data.myvar + 1;
$(this).on('DOMSubtreeModified.mynamespace', {myvar: event.data.myvar}, myfunc);
});
完全なサンプルを得ることは可能でしょうか?私はまだこの作業を行うことができませんでした... – krdluzni
リンクされたサイトには、匿名の再帰的階乗関数を作成する例があります。 – jimr
agruments.calleeは推奨されませんでした。 http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript –