$.each(".indent", function(index){
doesn't iterate over the elements of $('.indent')
but over the ".indent"
string whose length is 7 chars.
See reference
A more detailed explanation based on jQuery source code :
jQuery first checks if the first parameter, obj
(here your string), has a length
:
var ...
length = obj.length,
isObj = length === undefined || jQuery.isFunction( obj );
Your string having a length
(and not being a function), isObj
is false
.
In this case, the following code is executed :
for ( ; i < length; ) {
if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
break;
}
}
So, given the function f
, the following code
$.each(".indent", f);
is equivalent to
for (var i=0; i<".indent".length; i++) {
var letter = ".indent"[i];
f.call(letter, i, letter);
}
(you can log the letters using var f = function(i,v){console.log(v)};
or be reminded one of the subtleties of call
using var f = function(){console.log(this)};
)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…