次のような小さなスクリプトがあります。
hideElements = arguments.shift().split ( ',' );
for ( iterator in hideElements ) {
console.log (' --> hiding ' + hideElements[iterator] );
lg_transitions ( {kind:"slide-up"} , { target : hideElements[iterator] } );
}
デバッガーで実行すると、すべてが非常に合理的に開始されます。上記の最初の行にブレークポイントを設定しました。「次の関数呼び出しのステップオーバー」ボタンを押した後、「hideElements」変数を次のように初期化します。
これは私が期待していたことですが、最初の(そして唯一の)反復を完了すると、ループの先頭に戻り、0から始まった「イテレータ」が奇妙なことに「削除」に変わりました。 。は?それがどこから来たのか分かりません。しかし、それに続くconsole.logメッセージには、ヒントがあるかもしれません...それはコンソールに以下を出力します:
これは、「削除」と呼ばれる関数です。最近別の理由で追加した関数ですが、直接または間接的に呼び出されないため、なぜここで取り上げられるのか迷っています。「削除」の完全なコードに興味がある人は、次のようになります。
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
}
添加:
以前に追加しなかったコードは、arguments配列の初期化でした。これが私が持っていたものです(それ以来、名前を引数ではなく「args」に変更したことに注意してください):
function ConditionalFormatting ( key , eventObject , setOfRules ) {
console.log ("Entering conditional formatting: key is " + key + ", eventObject is " + eventObject.attr('id') + ", setOfRules is " + setOfRules );
var ruleStrings = [];
ruleStrings = setOfRules.split (';');
var targetOverride = false;
jQuery.each ( ruleStrings , function ( i , ruleString ) {
// There is a rule, now let's find out which one
var targetElement;
var args = [];
args = ruleString.split('::');
var rule = args.shift();